c++ - 在静态函数中调用成员函数指针

标签 c++ function class pointers static

标题描述性很强。我已将指向成员函数的非静态指针存储在一个结构的 vector 中,该结构在我的类中存储成员函数指针,我需要类中的静态函数来调用该函数。

我可以在我的静态函数中访问类实例,但我似乎仍然无法通过错误消息的指针 b/c 调用成员函数 error C2597: illegal reference to non-static member

我现在的语法是(object->*(vector[a].function)) (parameter)。简化代码如下:

class Base
{
    private:
        struct FunctionRelation
        {
            UINT message;
            LRESULT (Base::*function) (HWND, WPARAM, LPARAM);
        };

        static LRESULT CALLBACK WndProc (HWND window, UINT msg, WPARAM wparam, LPARAM lparam);

        std::vector<FunctionRelation>   func_rel;
}

指向 Base 的指针存储在传递给 WndProc 函数的窗口的 USERDATA 中,因此我可以访问类实例。在 WndProc 我有:

Base *user_data = reinterpret_cast<Base *>(GetWindowLongPtr (window, GWLP_USERDATA));

//Loop through our function relations and call those functions. Else, just return DefWindowProc.
if (user_data != NULL) //If it is not directly after we created a window.
    for (int a = 0;a < static_cast<int>(user_data->func_rel.size ());a++)
        if (user_data->func_rel[a].message == msg)
            return (user_data->*(func_rel[a].function)) (window, wparam, lparam);

return DefWindowProc (window, msg, wparam, lparam);

最佳答案

I have tried the (object)->*(function) (parameter) syntax

如果 object 是指针,或者 (object.*function)(parameter),请尝试使用 (object->*function)(parameter) 语法 如果它是对象或引用。

更新:现在您已经发布了错误消息和一些有代表性的代码,我们可以看到问题是您正试图从静态成员函数访问类成员 func_rel。您需要通过类指针访问它:

(user_data->*(user_data->func_rel[a].function)) (window, wparam, lparam);
              ^^^^^^^^^^^

关于c++ - 在静态函数中调用成员函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19320010/

相关文章:

c++ - 将 32 位地址的类型转换为 (BYTE *) 和 (DWORD *) 有什么区别

c++ - 扭曲双向链表

r - 使用R中的函数抓取网站,返回 "subscript out of bounds"错误

c - 在 C 中如何使用指针递增变量?

ios - 我可以拥有一个部分在 Swift 中实现,部分在 Objective C 中实现的类吗?

javascript - 如何检查两个类实例是否具有相同的值

c++ - 有没有办法测试数组是否已经创建?

c++ - C++ 中的对象分配

javascript 创建函数

java - 当方法名与类名相同时如何实例化嵌套类?