我正在使用C++.
我试图制作一个类方法的地图.
即:
map<int,void*> mapIdToMethod;
Run Code Online (Sandbox Code Playgroud)
方法:
void MyClass::MyMethod(void*);
Run Code Online (Sandbox Code Playgroud)
我尝试过的:
mapIdToMethod.insert(make_pair(1, (void*)&MyClass::MyMethod));//Not compiled
mapIdToMethod.insert(make_pair(1, (void*)&MyClass::MyMethod()));//Not compiled
Run Code Online (Sandbox Code Playgroud)
那么,为什么这样做最好的是什么?
谢谢!
*我无法使用 Boost
您不需要使用void*,只需直接使用成员函数指针即可.
std::map<int, void (MyClass::*)(void*)> mapIdToMethod;
Run Code Online (Sandbox Code Playgroud)
顺便说一句:你的使用std::map::insert是错误的.你可以
mapIdToMethod.insert({1, &MyClass::MyMethod});
Run Code Online (Sandbox Code Playgroud)
或使用 std::make_pair
mapIdToMethod.insert(std::make_pair(2, &MyClass::MyMethod));
Run Code Online (Sandbox Code Playgroud)
编辑
请注意,您需要一个实例来调用它,例如:
MyClass mc;
(mc.*mapIdToMethod.at(1))(nullptr);
Run Code Online (Sandbox Code Playgroud)