C ++ - 使用initializer_list作为参数的模板函数

时间:2016-10-17 15:06:07

标签: c++ c++11 templates initializer-list

我写了一个简单的函数来计算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。

1 个答案:

答案 0 :(得分:2)

查看documentationstd::initializer_list没有operator[],所以这一行:

T minValue = values[0];

无效。您可以将其替换为:

T minValue = *values.begin();