是否可以定义指向构造函数的函数指针?

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" ... ,并在构造函数上使用工厂函数包装器。

【讨论】:

以上是关于是否可以定义指向构造函数的函数指针?的主要内容,如果未能解决你的问题,请参考以下文章

指向具有私有构造函数的类的类成员的指针

构造一个指向 alloca 的函数指针会导致链接器错误?

在 C# String 构造函数 String(Char*) 中,为啥构造函数不期望指向字符数组的指针?

C++函数指针与成员函数指针

虚函数和基类中的this指针的问题!

我可以在所述对象的构造函数中创建指向对象的指针吗?