C++ - 使用 initializer_list 作为参数的模板函数
C++ - Template function using initializer_list as a parameter
我写了一个简单的函数来计算 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;
}
但我收到以下错误:
error C2027: use of undefined type 'T'
error C2226: syntax error: unexpected type 'std::initializer<_Elem>'
error C2988: unrecognizable template declaration/definition
error C2059: syntax error: ')'
error C2143: syntax error: missing ';' before 'identifier'
我尝试用 std::vector
更改 std::initializer_list
并且没有错误。这是否意味着我们不能使用 std::initializer_list
作为参数来定义模板函数?我正在使用 Visual Studio 2013.
在documentation中查找,std::initializer_list
没有operator[]
,所以这一行:
T minValue = values[0];
无效。您可以将其替换为:
T minValue = *values.begin();
我写了一个简单的函数来计算 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;
}
但我收到以下错误:
error C2027: use of undefined type 'T'
error C2226: syntax error: unexpected type 'std::initializer<_Elem>'
error C2988: unrecognizable template declaration/definition
error C2059: syntax error: ')'
error C2143: syntax error: missing ';' before 'identifier'
我尝试用 std::vector
更改 std::initializer_list
并且没有错误。这是否意味着我们不能使用 std::initializer_list
作为参数来定义模板函数?我正在使用 Visual Studio 2013.
在documentation中查找,std::initializer_list
没有operator[]
,所以这一行:
T minValue = values[0];
无效。您可以将其替换为:
T minValue = *values.begin();