如何为函数指针设置默认函数

how to set a default function for a function pointer?

本文关键字:函数 设置 默认 指针      更新时间:2023-10-16

我正在从代码中的.SO‘plugin’文件加载一个函数。该插件将定义3个非常具体的功能,提前定义每个函数的完整API(重点是允许同一程序的不同实例通过使用不同的插件来修改它们的行为。由于它的使用量、对速度的需求以及我的普遍懒惰,我决定使用一个静态函数指针,它可以存储插件函数,而不是将函数指针传递到各种对象周围。

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

不管出于什么原因,我似乎不能这么做。如果我试图在.h文件中定义no-op函数并将函数指针分配给它,我会在.h中定义函数时遇到各种错误。如果我试图只在.h中声明方法的原型并将函数指示器分配给原型,我会得到一个未声明的函数异常,即使函数是在.cpp文件中定义的。

我知道我可以很容易地将函数指针分配给main()函数中的no-op。但是,有没有一种方法可以做到这一点,即使我(或后来的人)没有在main()方法中正确分配指针,H.文件也会指定指针默认为我的no-op函数?

Header(比如PluginInterface.h):

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

来源(比如PluginInterface.cpp):

#include "PluginInterface.h"
static void default_plugin_function(...) {/* does nothing */};
void (*my_plugin_function_ptr)(...)=&default_plugin_function;