使用auto作为模板参数

时间:2012-08-29 11:33:57

标签: c++ templates c++11 auto

我正在尝试使用GCC 4.7.1编译以下-std=c++11标志:

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 ‘<expression error>’

是否有使用auto作为模板参数的特殊方法,或者它是否可能?

2 个答案:

答案 0 :(得分:7)

我认为你要找的是boost::any

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

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

答案 1 :(得分:3)

根本不可能。 auto背后的类型必须从某事物中推断出来。你可以得到的最接近的是使用带有表达式的decltype

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

decltype解析为一种类型,您不能在编译时更改它。