为了在C++中实现插件模式,我使用了带有显式链接的共享库(用dlopen加载共享库)。
有没有可能定义一个指向共享库中定义的类的构造函数的函数指针,或者我必须在共享库中定义工厂方法来实例化(和初始化)共享库中的类的对象?当然,在我的主应用程序中,我会定义一个指向工厂方法的函数指针,该方法将返回我需要的类的一个实例。
干杯
发布于 2010-12-14 20:18:57
这个问题的答案是否定的,您不能定义指向构造函数的成员或函数指针。
对于dlopen,您需要提供一个具有c链接的函数并动态加载它,您可以使用该函数来创建对象,您还需要另一个函数来删除对象。
关于它的更多信息here
发布于 2010-12-14 20:57:44
在使用dlsym()获取指针时,您需要注意名称损坏问题。依赖某些特定的分解方法并不是一个好主意,它们都太多样化了。因此,唯一合理的做法是将您的插件接口公开为外部"C“{ ... },在构造函数上使用工厂函数包装器。
https://stackoverflow.com/questions/4439022
复制相似问题