我有这个对象,它只是 Windows 中外部 dll 的包装器。在创建对象时,构造函数会在注册表中查询键,然后使用 dll 查询该键的值以查找文件夹,然后加载 dll,获取此 dll 的初始化程序的 ProcAddress 并对其进行初始化。
然后,我想向其他客户提供这个 dll 的所有功能,所以我的类包装器提供了成员函数来检查我们是否有GetProcAddress '它,如果没有,那么我们就这样做,获取指向这个函数的指针,然后调用它。
我不想在构造函数时执行所有 GetProcAddress,因为有数百个函数,并且很可能给定的客户端只需要一小部分,所以 GetProcAddress 一切都是浪费。
但是现在,我需要定义这些函数,感觉就像一个巨大的复制粘贴。所有成员函数都在做完全相同的事情,比如
ResultType Wrapper::pertainingMemberFunction(...)
{
if (this->pointerToPertainingDLLFunction == nullptr) {
this->pointerToPertainingDLLFunction =
reinterpret_cast<pertainingType>(GetProcAddress(HMODULEDLL, "pertainingName"));
}
return this->pointerToPertainingDLLFunction (...);
}
这真的感觉像是一个非常次优的解决方案。我觉得必须有某种方法来模板化所有这些代码,以便在编译时正确生成。或者也许最初的方法不是最好的开始,我不确定。