初始化程序是否有类型?如果是的话,那是什么?在这种情况下,我怎样才能使以下代码有效?
template <typename T>
int f(T a)
{
return 0;
}
int main()
{
f({1,2});
}
它出现以下错误:
c.cpp:32:2:错误:没有匹配函数来调用'f' F({1,2}); ^ c.cpp:18:5:注意:候选模板被忽略:无法推断模板参数'T'int f(T a) 生成^ 1错误。
答案 0 :(得分:3)
撰写f({1,2})
时,您正在使用list initialization。
如果您想将initializer list {1,2}
传递给函数,可以这样做:
#include <initializer_list>
#include <iostream>
template <typename T>
int f(std::initializer_list<T> a) {
for(const T& x : a) {
std::cout << x << ", " << std::endl; // do something with the element
}
return 0;
}
int main() {
f({1,2});
}
答案 1 :(得分:1)
如果您想为列表中的每个值执行函数,可以执行以下操作:
#include <iostream>
template <typename T>
int f(T a)
{
return 0;
}
int main()
{
for (int a : {1,2})
std::cout << f(a) << std::endl;
}
注意这需要c ++ 11兼容的编译器
如果你想将列表传递给你的函数,那么就像这样:
#include <iostream>
#include <initializer_list>
template <typename T>
int f(T a)
{
return 0;
}
int main()
{
std::cout << f(std::initializer_list<int>{1, 2}) << std::endl;
}