У меня есть несколько подобных структур с увеличивающимся числом членов, но последовательное именование членов:
struct one { int a; };
struct two { int a; int b; };
struct three { int a; int b; int c; };
У меня также есть шаблонная функция, которую я хочу, чтобы один из этих членов структуры, splatted:
template <typename T, typename ... ARGS> // T will be one, two, or three
void func(ARGS... args); // This should take 1, 2, or 3, int arguments respectively
Я хочу, чтобы это можно было назвать примерно так:
two foo;
func<two>(splatter(foo));
Где splatter
каким-то образом разделит foo
, чтобы преобразовать в func<two>(foo.a, foo.b)
.
Я, очевидно, могу просто развернуть эту строку без splatter
, но код, в котором я называю func
, сам по себе удачно создан. Я пытался использовать initializer_list
, но я не могу понять, как создать его на основе только одного типа шаблона.
К сожалению, мой компилятор также не поддерживает constexpr if
для вызова func
или построения initializer_list
. Есть ли у меня другие варианты?