c++ - 映射到方法 c++

标签 c++

我正在使用 C++。
我试图制作一个映射到类方法。
即:

map<int,void*> mapIdToMethod;

方法:

void MyClass::MyMethod(void*);

我尝试了什么:

mapIdToMethod.insert(make_pair(1, (void*)&MyClass::MyMethod));//Not compiled
 mapIdToMethod.insert(make_pair(1, (void*)&MyClass::MyMethod()));//Not compiled

那么,最好的原因是什么以及如何做?
谢谢!

*我无法使用Boost

最佳答案

不需要使用void*,直接使用成员函数指针即可。

std::map<int, void (MyClass::*)(void*)> mapIdToMethod;

顺便说一句:您对 std::map::insert 的使用是错的。你可以

mapIdToMethod.insert({1, &MyClass::MyMethod});

或使用 std::make_pair

mapIdToMethod.insert(std::make_pair(2, &MyClass::MyMethod));

编辑

注意你需要一个实例来调用它,比如:

MyClass mc;
(mc.*mapIdToMethod.at(1))(nullptr);

LIVE

关于c++ - 映射到方法 c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36468982/

相关文章:

c++ - VS Code 是否有用于 C++ 扩展的内存查看器和/或反汇编器?

c# - 将结构从 C++ 转换为 C#

c++ - 使用模板化仿函数segfaults调用printf(仅64位,在32位中使用valgrind clean)

c++ - 奇怪的 "Undefined symbols"错误?

c++ - OS X 获取远程进程输入参数有时会失败

c++ - 具有静态存储的变量地址模板

c++ - 如何在avi或任何其他可以播放的扩展中转换.h263?c++

c# - SWIG、Box2D 和 C#

c++ - 如果在 C++ 中的列表迭代中完成删除,则出现段错误

C++ 模板包扩展/可变参数