Есть ли у инициализатора тип? если так, то что? в таком случае, как я могу заставить работать следующий код?
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 ошибка сгенерирована.
При написании f({1,2})
ты используешь инициализация списка.
Если вы хотите передать список инициализаторов {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});
}
Если вы хотите выполнить свою функцию для каждого значения в списке, вы можете сделать это:
#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;
}