我写了一个简单的函数来计算std::initializer_list
的最小值,如下所示:
template<typename T>
inline T min(const std::initializer_list<T>& values) {
T minValue = values[0];
for ( const auto& v : values )
if ( v < minValue ) minValue = v;
return minValue;
}
但我收到以下错误:
错误C2027:使用未定义类型'T'
错误C2226:语法错误:意外类型'std :: initializer&lt; _Elem&gt;'
错误C2988:无法识别的模板声明/定义
错误C2059:语法错误:')'
错误C2143:语法错误:缺少';'在'标识符'之前
我尝试使用std::initializer_list
更改std::vector
并且没有错误。这是否意味着我们无法使用std::initializer_list
作为参数来定义模板函数?我正在使用Visual Studio 2013。
答案 0 :(得分:2)
查看documentation,std::initializer_list
没有operator[]
,所以这一行:
T minValue = values[0];
无效。您可以将其替换为:
T minValue = *values.begin();