【发布时间】:2012-10-10 09:43:45
【问题描述】:
对不起,这个复杂的问题,但基本上这个想法很简单。我有一个可变参数类模板:
template<class P1, class P2, class ... P3s>
class A
{
...
};
我想要一个 A 类生成器,它接受一个整数模板参数 N 并用 N 个 P3s 参数实例化一个 A 类。喜欢:
template<class P1, class P2, class P3, int N>
class GenA : /* somehow */ : public A<P1, P2, /* N times */ P3, P3, ...>
{
...
};
所以用法是:
// Generates A<Class1, Class2, Class3, Class3, Class3>
GenA<Class1, Class2, Class3, 3> a;
我已经尝试过使用编译时递归和部分特化来做到这一点
template <class P1, class P2, int N, class P3>
class GenA : public GenA<P1, P2, N-1, P3, P3>
{
...
}
template <class P1, class P2, int N, class ... P3s>
class GenA<P1, P2, 0, P3s ...> : public A<P1, P2, P3s, ...>
{
...
}
但是 C++11 不承认第二个模板是第一个模板的特化(因为它实际上是不同的)并且永远不会到达递归的基本情况(它停止抱怨太多递归级别)。有什么想法吗?
谢谢
图努兹
【问题讨论】:
-
如果没有过多的模板专业化似乎很难做到。
-
在你选择了一个答案后,你能提供一个解决方案的基准吗?