我有一堆这样的结构,成员数量不断增加,但成员命名一致:
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
. 我还有其他选择吗?