我有一个类Foo
需要有可变数量的模板参数,但这些参数需要是某种泛型类型,而不是完全任意的。例如变量模板部分特化类限制模板参数的类型
template < int I, typename T> struct Arg;
using type1 = Foo<Arg<3, double>>;
using type2 = Foo<Arg<1, int>, Arg<7, float>, Arg<1, int>>;
我想知道什么是最好的方式来实现这一点。我想我需要用一个简单的可变参数模板第一次启动
template < typename ...T >
class Foo;
从那里,我可以按照递归路
template < int I, typename T, typename ...Others>
template Foo<Arg<I, T>, Others...>
{
...
};
但this answer另一个问题读给我留下想知道我的知识可变参数模板以及如何递归有时可以避免。
我的问题是,这是否模板参数预计将在一个相对刚性的格式事实启用Foo
部分专业化这不会是递归的,这将有效地处理所有Foo
S中的形式Foo<Arg<...>,Arg<...>,...>
的?
人们仍然可以将参数放在一个元组中,并在需要时访问它们,所以我不会说它们很难使用。简单地添加N并输入到'Arg'来输出它们。 – skypjack