我已经查看了所有类似的问题,但似乎没有出现这种特定情况。
我有一个插件系统,当插件想要插入一个钩子(这是一个类函数)时,它会接收要调用的函数的地址。
插入:
struct plugin {
...
bool (*insert_hook)(hook_data*);
...
};
班级:
class manager {
...
private:
InsertHook(hook_data *hook);
...
};
管理器中的创建功能:
{
...
typedef bool (manager::*InsertHookFunc)(hook_data*);
InsertHookFunc hook_func = &manager::InsertHook;
// assigning this to the plugin ???
// C2440, cannot convert from 'hook_func' to 'bool (__cdecl *)(hook_data *)'
plugin->insert_hook = hook_func;
...
}
管理器调用插件,如果插件需要插入任何钩子,它需要调用管理器。
这样做的正确方法是什么?我知道它可以正常工作(插件被传递给类创建函数的函数指针以请求插件对象),但由于它是类函数(使用非类函数,这个任务工作正常)。
我可以创建一个非类函数作为经理的朋友,但我确信这可以直接完成,我就是想不通......