假设我有一个类,可以采取类型和参数varadic号:如何专门化0可变参数的可变参数模板类?
template <typename T, typename... Args>
class B
{
T<Args...> x;
};
该类构成了一个别名类型,这将是这样的基础:
template <typename... Args>
using AliasedType = B<T, Args...>;
但有些情况下,T
类型不是模板,在这种情况下,可变包的长度将为0.但是,class B
仍会尝试使用一组空模板参数声明此类型的实例,从而导致错误。因此,要解决这个问题,我试图创造B
模板专业化的,完全不varadic参数都:
template <typename T>
class B<T>
{
T x;
};
但这似乎并没有工作。
为了说明工作示例问题:
class A
{
};
template <typename T, typename... Args>
class B
{
T<Args...> x;
};
template <typename T>
class B<T>
{
T x;
};
main() {
B<A> a;
}
输出是:
error: ‘T’ is not a template T<Args...> x;
为什么没有这个解决的特殊版本,接受非模板类型?我确信我在这里错过了一些非常明显的东西......看起来像一个空的可变模板包不像我以前所想的那样被解析为“无”。
你写的代码没有意义。如果'T'是一种类型,则不能有'T'。 –
2014-10-02 23:32:25
@KerrekSB好点.. – arman 2014-10-02 23:33:41
显然你可以用模板模板参数编写一些*代码,但是我完全不清楚你想要实现什么,或者为什么。 – 2014-10-02 23:34:21