我正在尝试使用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
作为模板参数的特殊方法,或者它是否可能?
答案 0 :(得分:7)
答案 1 :(得分:3)
根本不可能。 auto
背后的类型必须从某事物中推断出来。你可以得到的最接近的是使用带有表达式的decltype
。
std::map<std::string, decltype(some expression)> myMap;
但decltype
解析为一种类型,您不能在编译时更改它。