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

时间:2010-12-14 12:14:02

标签: c++ linux design-patterns unix shared-libraries

我正在使用带有显式链接的共享库(使用dlopen加载共享库),以便在C ++中实现插件模式。

是否可以定义一个指向共享库中定义的类的构造函数的函数指针,或者我必须在共享库中定义工厂方法,它将从共享库中实例化(并初始化)一个类的对象?当然,在我的主应用程序中,我将定义一个指向工厂方法的函数指针,该方法将返回我需要的类的实例。

干杯

2 个答案:

答案 0 :(得分:6)

问题的答案是否定的,你不能定义构造函数的成员或函数指针。

对于dlopen,您需要提供一个带有c连接的函数并动态加载它,您可以使用它来创建对象,还需要另一个函数来删除对象。

有关它的更多信息here

答案 1 :(得分:1)

使用dlsym()获取指针时,您需要注意名称错位问题。依靠某种特定的重整方法并不是一个好主意,它们太多样了。因此,唯一合理的做法是将您的插件接口公开为extern“C”{...},并在构造函数上使用工厂函数包装器。