У меня есть класс с шаблоном, который принимает целое число:
template <unsigned int N>
class Example {};
Я ищу способ определения функции (члена), которая принимает в качестве аргументов некоторое количество объектов Example
. Сумма должна быть определена N
, поэтому функция будет использоваться следующим образом:
Function(Example<2>(), Example<2>());
Function(Example<3>(), Example<3>(), Example<3>());
То, что я пробовал до сих пор:
Используя список инициализаторов, один может передать набор объектов функции:
template <unsigned int N>
void Function(std::initializer_list<Example<N>> list);
//...
Function({Example<2>(), Example<2>()});
Однако проблема, кроме того, что передается только один аргумент (список), заключается в том, что с помощью этого метода можно использовать любое количество аргументов:
Function({Example<2>()});
Я также попытался использовать вариационную функцию:
template <unsigned int N>
void Function(Example<N> e...)
{
va_list args;
va_start(args, e);
//...
}
Function(Example<2>(), Example<2>());
Это позволяет использовать реальные параметры, но проблема использования любого количества аргументов остается, и невозможно узнать, сколько аргументов было фактически передано.