c++ - 如何填充和访问std::map<std::pair<enum1, enum2>, funcPtr>?

标签 c++ dictionary enums function-pointers std-pair

我想知道如何填充这种类型的映射,主要是如何访问函数指针。

map :

enum enum1
{
   val11,
   val12,
   val13
};

enum enum2
{
   val21,
   val22,
   val23
};

typedef void(MyClass::*funcPtr)();

std::map<std::pair<enum1, enum2>, funcPtr> map;

我是这样填的,好像可行:

map.insert(std::make_pair(std::make_pair(val11, val21), &MyClass::init));

但是我无法访问这样的功能:

map[std::make_pair<val11, val21>]();

我做错了什么?

最佳答案

您在 make_pair 中使用了错误的括号,需要在 MyClass 的某些实例上调用成员函数(使用 .*->* 运算符):

MyClass obj;
(obj.*map[std::make_pair(val11, val21)])();

关于c++ - 如何填充和访问std::map<std::pair<enum1, enum2>, funcPtr>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16688953/

相关文章:

Swift 枚举原始值 : not working with CGFloat = -1. 0

c++ - 重载运算符 ->

java - 使用 HashMap 查找对象

c++ - 如何初始化对

python - 使用迭代将旧字典中的值提取到新字典中

Python if-else 困惑

c++ - 为什么我不能分配错误的枚举元素,但可以与错误的枚举元素进行比较?

c# - 当枚举类型也像字符串一样命名时,来自字符串的 ParseEnum

c++ - 类内的类数组 - 动态数组的问题 (c++)

c++ - Project Euler #8 c++ 来自初学者