我有3个不同的C++映射声明。
map<string, string> map1;
map<string, int> map2;
map<string, double> map3;
我想根据情况使用其中一张 map 。比方说
if (map_value == "map1") { default_map = map1; }
else if (map_value == "map2") { default_map = map2; }
else { default_map = map3; }
我的问题是我不知道如何在C++中声明
default_map
,可以根据条件进行更改。我期望在C++中有类似map<Object,Object> default_map
的声明。编辑。
我选择
string
,int
和double
作为假设对象。实际的map1
,map2
和map3
存储函数指针。根据映射中的值,我调用不同的函数。函数签名是相同的,但是那些函数指针来自不同的类。从本质上讲,class A
具有void funcA(string);
,class B
具有void funcA(string);
,class C
具有void funcA(string);
,funcA
的实现取决于类。任何帮助表示赞赏。
最佳答案
鉴于您在评论中的澄清,我可以提供以下建议:
std::function<R(K, T1, T2, T3)> look_up_and_call;
X x;
Y y;
Z z;
if (map_value == "map1") {
look_up_and_call =
[&x, &map1](K key T1 t1, T2 t2, T3 t3) { return (x.*map1[key])(t1, t2, t3); }
} else if (map_value == "map2") {
look_up_and_call =
[&y, &map2](K key T1 t1, T2 t2, T3 t3) { return (y.*map2[key])(t1, t2, t3); }
} else {
look_up_and_call =
[&z, &map3](K key T1 t1, T2 t2, T3 t3) { return (z.*map3[key])(t1, t2, t3); }
}
现在,对于任何给定的 map 键
key
,您都可以这样调用绑定(bind)函数:R result = look_up_and_call(key, arg1, arg2, arg3);
我已经简化了代码,例如我们假设map元素始终是非null成员函数指针。您可以调整此方案以允许使用其他类型的指针,并且实际代码可能应该处理密钥的不存在。您也可以编写类似的函数以将元素添加到 map 。
关于c++ - 根据条件在3种不同的 map 中选择,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42939407/