タイトルはかなり説明的です。クラスにメンバー関数ポインターを格納する構造体のベクトルに、メンバー関数への非静的ポインターを格納しました。その関数を呼び出すには、クラスに静的関数が必要です。
静的関数でクラス インスタンスにアクセスできますが、エラー メッセージのポインター 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);