为什么这张地图<;int、auto>;不允许? 我试图在C++中实现一个异构的映射。我知道之前已经讨论过这一点,但我想知道为什么不允许以下情况: map<int, auto> myMap; map-myMap;

为什么这张地图<;int、auto>;不允许? 我试图在C++中实现一个异构的映射。我知道之前已经讨论过这一点,但我想知道为什么不允许以下情况: map<int, auto> myMap; map-myMap;,c++,c++11,C++,C++11,是否存在这样一种方法,我可以在不使用(void*)指针的情况下将插入操作简单化 我在考虑最终能做这样的事情: vector<int> v; myMap.insert(make_pair<int, int>(1,12334)); myMap.insert(make_pair<int, vector<int>)(2, v)); 向量v; myMap.insert(make_pair(112334)); myMap.insert(make_pair就是从那个

是否存在这样一种方法,我可以在不使用(void*)指针的情况下将插入操作简单化

我在考虑最终能做这样的事情:

vector<int> v;
myMap.insert(make_pair<int, int>(1,12334));
myMap.insert(make_pair<int, vector<int>)(2, v));
向量v; myMap.insert(make_pair(112334));
myMap.insert(make_pair就是从那个东西中提取信息的东西,它的类型是什么


你想从
boost
库中得到类似
variant
any
的东西。它们仍然是强类型的,但使用了大量模板。

你在寻找一个异构的地图,而不是同质的地图。例如,当你使用这个术语时,谷歌上有相当多的点击率。

auto
不适合你ean“这可以是任何类型”。这是一个特殊的关键字,只能用于声明变量,其含义是“此变量的类型与用于初始化它的表达式的类型相同”。一个
auto
变量的类型与任何其他已声明变量的类型一样不可更改;唯一的区别是您不必拼写类型的名称。由于
auto
不是一个类型,而只是简化声明的语法糖,因此它不能用作模板参数。

这是不允许的使用它没有意义。你不能使用这个假设构造中的值来存储关于每个实例中存储的类型的一些元信息(以及一个大的switch语句),这就是e.g.所做的。

不幸的是,我不能使用boost。我正在考虑将信息提取为自动,然后将其转换为其他类型。然后你认为
auto
void*
。你已经有了答案。@p.R:为什么“不能”您使用boost来实现这个功能?
auto
是一个编译时的东西,与rtti无关。这是我最初的实现,但我想尝试其他的可能性。@rubenvb我必须让代码独立于外部库:/I知道……我知道……令人沮丧……感谢您澄清这一点!我把它误解为某种一个“任意”替换。@ P.R.我希望C++中有这样的东西;缺少一个最终基类(比如java和C的<代码>对象< /C> >)可能是恼人的。如果有一组有限的类要使用,你可能可以创建一个包装类(或者这样的层次)。为了避免
void*
;除此之外,我没有任何想法。@P.R.:(为了使包装类成为
void*
的有用替代品,它必须提供一些处理包装数据的方法,因此这样做可能没有任何意义,这取决于您希望放入映射的类型。)@Aasmund非常感谢您的帮助。不幸的是,我不知道对象集。我正在尝试编写一个类,该类将这些映射中的一个作为成员,然后我想将该类传递给其他类,允许它们通过将其推送到该映射中来向该类(正在传递的那个)添加“数据”。我实现了(void*)但是可能出现的大量问题迫使我非常小心地处理这些问题。@P.R:我明白了。对于添加到地图中的对象,您最终将如何处理?