是否可以定义指向构造函数的函数指针?
Posted
技术标签:
【中文标题】是否可以定义指向构造函数的函数指针?【英文标题】:Is it possible to define a function pointer to a constructor? 【发布时间】:2010-12-14 12:14:01 【问题描述】:我正在使用具有显式链接的共享库(使用dlopen
加载共享库)以便在 C++ 中实现插件模式。
是否可以定义一个指向共享库中定义的类的构造函数的函数指针,或者我必须在共享库中定义工厂方法,该方法将从共享库实例化(和初始化)类的对象?当然,在我的主应用程序中,我会定义一个指向工厂方法的函数指针,该方法将返回我需要的类的实例。
干杯
【问题讨论】:
在 Windows 上,您可以使用 __declspec(dllexport/dllimport) 导出和导入构造函数(实际上是整个类)。值得检查编译器的编译器文档,看看它是否提供类似的东西。 在 linux 上,默认情况下会导出所有内容,您可以链接到任何您想要的内容。但他正在使用显式链接(想想 WinAPI 中的 LoadLibrary/GetProcAddress),老实说,我不知道在这种情况下如何处理构造函数。这是个好问题。 【参考方案1】:问题的答案是否定的,你不能定义一个成员或函数指针指向构造函数。
dlopen需要提供一个c联动的函数并动态加载,可以用来创建对象,还需要另外一个函数来删除对象。
更多信息here
【讨论】:
一篇非常好的文章!我最喜欢的是它推荐使用带有纯虚函数的基本接口。显然这是实现插件的最佳方式。【参考方案2】:在使用 dlsym() 获取指针时,您需要注意名称修改问题。依赖某些特定的修饰方法不是一个好主意,它们都太多样化了。因此,唯一合理的做法是将您的插件接口公开为 extern "C" ... ,并在构造函数上使用工厂函数包装器。
【讨论】:
以上是关于是否可以定义指向构造函数的函数指针?的主要内容,如果未能解决你的问题,请参考以下文章