如何设置函数指针的默认函数?

时间:2012-07-12 19:21:22

标签: c++

我正在我的代码中从.SO'插件'文件中加载一个函数。该插件将定义3个非常具体的函数,每个函数的完整API都是提前定义的(这一点允许同一程序的不同实例通过使用不同的插件来修改它们的行为。由于它的使用量很大,需要速度和我的一般懒惰我决定使用静态函数指针,它可以存储插件函数,而不是将函数指针传递给各种对象。

插件可能不存在,在这种情况下,我想运行本质上是“无操作”的函数来代替从插件中读取的函数。为了一般安全,我想确保静态函数指针指向我的无操作函数。

无论出于何种原因,我似乎无法做到这一点。如果我尝试在.h文件中定义no-op功能并将我的函数指针指向它,我会在.h中定义一个函数时遇到各种错误。如果我尝试仅在.h中声明方法的原型并将函数指针分配给原型,我会得到一个未声明的函数异常,即使该函数是在.cpp文件中定义的。

我知道我可以轻松地将函数指针指向main()函数中的no-op。但有没有办法做到这一点,以便.H文件gaurentees指针默认为我的无操作功能,即使我(或以后的某个人)没有在我的main()方法中正确分配它?

1 个答案:

答案 0 :(得分:3)

标题(例如,PluginInterface.h):

extern void (*my_plugin_function_ptr)(...);

Source(比如,PluginInterface.cpp):

#include "PluginInterface.h"

static void default_plugin_function(...) {/* does nothing */};

void (*my_plugin_function_ptr)(...)=&default_plugin_function;