我正在尝试用C ++实现异构映射。我知道之前已经讨论过,但我想知道为什么不允许以下内容:
map<int, auto> myMap;
无论如何,我可以简单地插入地图而不必诉诸(void *)指针吗?
我在想最终能够做到这样的事情:
vector<int> v;
myMap.insert(make_pair<int, int>(1,12334));
myMap.insert(make_pair<int, vector<int>)(2, v));
这可能吗?或者我的努力是徒劳的吗?
由于
答案 0 :(得分:19)
auto
并不意味着“这可以是任何类型”。它是一个特殊的关键字,只能用于声明变量,其含义是“此变量的类型与用于初始化它的表达式的类型相同”。 auto
变量的类型与任何其他声明变量的类型一样不可更改;唯一的区别是你不必拼出该类型的名称。由于auto
不是一种类型,而只是用于简化声明的语法糖,因此它不能用作模板参数。
答案 1 :(得分:5)
只是从那个东西中提取信息,它的类型是什么?
您需要variant
库中的any
或boost
。它们仍然是强类型的,但是大量使用模板。
答案 2 :(得分:2)
您正在寻找异构地图,而不是同类地图。当您使用该术语时,谷歌上有很多点击,例如Revisiting Heterogeneous Containers。
答案 3 :(得分:2)
这是不允许的,因为它没有意义。您不能使用来自此假设构造的值,并存储一些关于每个实例中存储的类型的元信息(以及一个大的switch语句),例如, Boost Variant确实如此。