0

タイトルはかなり説明的です。クラスにメンバー関数ポインターを格納する構造体のベクトルに、メンバー関数への非静的ポインターを格納しました。その関数を呼び出すには、クラスに静的関数が必要です。

静的関数でクラス インスタンスにアクセスできますが、エラー メッセージのポインター 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 へのポインタは、関数に渡されたウィンドウの USERDATA に格納されているWndProcため、クラス インスタンスにアクセスできます。私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);
4

1 に答える 1