[英]Why is a class/struct declaration with different number of template parameters not allowed?
template <class T1, class T2>
class A {};
template <class T1>
class A {};
A<int, int> a;
A<int> b;
此代码生成
错误C2976:'A':模板参数太少
在'A'级的第二次讨论中。
您的第一个声明定义了A
带有2个模板参数的A
类。 之后的任何事情都必须是该特殊化或其他一些启用的版本。
如果要允许1或2个模板参数,可以使用可变参数模板,如下所示:
template <class... Args>
class A;
template <class T1, class T2>
class A<T1, T2> {};
template <class T1>
class A<T1> {};
这里没有SFINAE。 您将最初具有2个模板参数的A
类重新声明为仅具有1个模板参数的另一个模板参数,从而将错误重新声明。 g ++提供了更明确的错误:
错误:使用1个模板参数类A {}重新声明;
注意:先前的声明'模板类A'使用了2个模板参数
SFINAE是关于替代失败的 ; 即问题必须是您作为模板参数放置的类型的结果。 不是每个错误都符合......作为一个极端的例子考虑
template<T>
struct foo {
!@#*&!%^@
};
这也是一个错误,但不是替换失败:-)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.