Initializer_list в качестве аргументов для шаблона с переменным значением

#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. То, что вы описали выше, невозможно выполнить. Можете ли вы объяснить, в чем заключалась ваша реальная проблема, которая побудила вас попытаться сделать то, что вы сделали выше?