繁体   English   中英

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

[英]Why is this map<int, auto> not allowed?

我试图在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));

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

谢谢

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

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

你需要类似variantboost库中的any东西。 它们仍然是强类型的,但是大量使用模板。

您正在寻找异构地图,而不是同类地图。 当您使用该术语时,谷歌上有相当多的点击,例如Revisiting Heterogeneous Containers

这是不允许的,因为它没有意义。 您不能使用此假设构造中的值来存储一些关于每个实例中存储的类型的元信息(以及一个大的switch语句),这就像Boost Variant所做的那样。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM