映射到方法c ++

Evy*_*tar 1 c++

我正在使用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

son*_*yao 5

您不需要使用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)

生活