我在编写 C++ 框架时遇到了问题,即用户使用它的开销应该比使用它的可能少。用户可以通过创建一个包含类的共享库来将他们的工作发布到框架,该类由框架的 BaseClass 派生并实现 extern "C" createInstance() 方法以返回其派生类的实例。所以框架可以通过dlsym()通过共享库调用createInstance-Method来访问用户类。
class BaseClass{}
class UserClass : public BaseClass{}
extern "C"{
BaseClass* UserXcreateInstance(){
return new UserClass();
}
}
在框架中:
typedef BaseClass* (*CreateInstance) ();
void* handle;
CreateInstance createInstance;
handle = dlopen( "libUserLibrary.so", RTLD_LAZY | RTLD_GLOBAL );
createInstance = reinterpret_cast <CreateInstance*> dlsym( handle, "UserXcreateInstance" );
BaseClass* userX = createInstance();
我的问题:是否可以生成UserXcreateInstance()-方法,在每个用户库中都是多余的,这样用户就不必考虑了?
我认为模板+宏是可能的,但我还没有找到一种方法来做到这一点......
我在想的另一种方法是通过 dlsym 和适当的名称修饰直接调用任何用户类的构造函数。(我从配置文件中知道任何命名空间+类名)但我认为这不是一个合适的解决方案,特别是构造函数调用与常规函数调用不同......但非常有趣......