#c #templates #c 11 #variadic-templates #initializer-list
#c #шаблоны #c 11 #переменные-шаблоны #инициализатор-список
Вопрос:
Я пытаюсь использовать initializer_list в качестве аргумента для шаблона variadic. Но я получаю сообщение об ошибке: could not deduce template argument for 'Types' from 'initializer-list'
Могу ли я как-то этого добиться?
struct Struct {
int a, b;
};
template<typename Type, typename ...Types>
void func(vector<Type>, initializer_list<Struct> lists, Types... args) {
}
int main() {
vector<float> vec;
func(vec, { Struct{ 1, 2 } });
func(vec, { Struct{ 1, 2 } }, vec, { Struct{ 2, 2 } });
return 0;
}
Комментарии:
1.
{..}
это список с привязкой к инициализации, который не является выражением и не имеет типа. Вы должны (вручную) указать тип.2. Почему бы и нет
func(vec, Struct{ 1, 2 }, vec, Struct{ 2, 2 });
?3. Вы хотите преобразовать
{ Struct{1,2} }
вvector<Struct>
неявно?4. Да, я думаю, это сработает, но выглядит не так хорошо. функция (vec, vector<Struct>{ Struct{ 1, 2 } }, vec, vector<Структура>{ Struct{ 1, 2 } });
5. То, что вы описали выше, невозможно выполнить. Можете ли вы объяснить, в чем заключалась ваша реальная проблема, которая побудила вас попытаться сделать то, что вы сделали выше?