c++ - 将结构体成员函数指针赋值给类函数

标签 c++ class struct function-pointers

我已经浏览了所有类似的问题,但似乎没有出现这个特定的场景。

我有一个插件系统,插件会接收函数的地址,以便在想要插入钩子(Hook)(这是一个类函数)时调用。

插件:

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;
    ...
}

管理器调用插件,如果插件需要插入任何钩子(Hook),则需要调用管理器。

这样做的正确方法是什么?我知道它正常工作(插件将函数指针传递给类创建函数以请求插件对象),但似乎我无法分配它,因为它是一个类函数(使用非类函数,此分配工作正常)。

我可以创建一个非类函数作为经理的 friend ,但我确信这可以直接完成,我只是无法弄清楚......

最佳答案

这些类型需要匹配:

typedef bool (manager::*InsertHookFunc)(hook_data*);
bool (*insert_hook)(hook_data*);

直接修复方法是在 plugin 中插入另一个 manager:::

bool (manager::*insert_hook)(hook_data*);

最好的风格可能是将typedef移到类管理器之外,如下所示:

struct manager; // allow manager to be referenced without its definition
typedef bool (manager::*InsertHookFunc)(hook_data*);

struct plugin {
...
    InsertHookFunc insert_hook;
...
};

或者,如果插件已经看到 manager 的定义,则执行

    manager::InsertHookFunc insert_hook;

typedef 在处理复杂类型时绝对是你的 friend 。

关于c++ - 将结构体成员函数指针赋值给类函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13523584/

相关文章:

结构解释的C++排序 vector

c++ - C++从其他函数分配类成员的值

c++ - () 运算符重载 C++

c++ - 在自定义类 vector 中查找

c++ - 调试器忽略已编辑的文件

c++ - 关于使用读写在文件中存储结构

c - 将值从文件存储到 C 中的结构数组

c++ - 错误 : expected constructor, 析构函数,或 ‘(’ token 之前的类型转换。即使我有一个构造函数?

c++ - CGAL - 不能使用 import_from_polyhedron_3

c++ - 如何在C++中一个一个地调用目录中的txt文件