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

时间:2013-10-11 13:57:06

标签: c++ function class pointers static

标题非常具有描述性。我在一个结构的向量中存储了一个非静态指针,该结构在我的类中存储成员函数指针,我需要在类中使用静态函数来调用该函数。

我可以访问静态函数中的类实例,但我仍然无法通过错误消息error C2597: illegal reference to non-static member

的指针b / c调用成员函数

我现在的语法是(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);

1 个答案:

答案 0 :(得分:3)

  

我尝试了(object)->*(function) (parameter)语法

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

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

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