0

我正在尝试使用带有-std=c++11标志集的 GCC 4.7.1 编译以下内容:

std::map<std::string, auto> myMap;

我正在尝试创建一个对象以包含大量各种类型的 Json 数据(int string、bool)以及子结构(list、map),因此我无法在编译时声明字段值的类型时间,所以我想我会使用auto关键字。

但是,当我尝试编译它时,我得到以下

error: invalid use of ‘auto’
error: template argument 2 is invalid
error: template argument 4 is invalid
error: unable to deduce ‘auto’ from ‘&lt;expression error>’

有没有一种特殊的方法可以auto用作模板参数,还是不可能?

4

2 回答 2

7

我认为您正在寻找的是boost::any

std::map<std::string, boost::any> myMap;

auto在编译时评估,不能用作动态运行时类型。

于 2012-08-29T11:43:12.953 回答
3

这根本不可能。后面的类型auto必须从某事中推断出来。最接近的方法是使用decltype一些表达式。

std::map<std::string, decltype(some expression)> myMap;

decltype这里解析为一个类型,你不能在编译时更改它。

于 2012-08-29T11:36:47.580 回答