为什么不允许这个地图<int,auto>?

Pep*_*epe 3 c++ c++11

我试图在C++中实现异构映射.我知道之前已经讨论过,但我想知道为什么不允许以下内容:

map<int, auto> myMap;
Run Code Online (Sandbox Code Playgroud)

无论如何,我可以简单地插入地图而不必诉诸(void*)指针?

我在想最终能够做到这样的事情:

vector<int> v;
myMap.insert(make_pair<int, int>(1,12334));
myMap.insert(make_pair<int, vector<int>)(2, v));
Run Code Online (Sandbox Code Playgroud)

这可能吗?或者我的努力是徒劳的?

谢谢

Aas*_*set 19

auto并不意味着"这可以是任何类型".它是一个特殊的关键字,只能用于声明变量,其含义是"此变量的类型与用于初始化它的表达式的类型相同".auto变量的类型与任何其他声明变量的类型一样不可更改; 唯一的区别是你不必拼出该类型的名称.因为auto它不是一个类型,而只是用于简化声明的语法糖,所以它不能用作模板参数.


Bli*_*ndy 5

只是从那个东西中提取信息,它的类型是什么?

你想要类似于variantany来自boost图书馆的东西.它们仍然是强类型的,但是大量使用模板.

  • @PR:为什么"不能"你为此使用提升?`auto`是一个编译时的东西,没有任何rtti相关. (4认同)
  • 然后你认为`auto`是`void*`.你已经有了答案. (2认同)