繁体   English   中英

为什么不允许使用不同数量的模板参数的类/结构声明?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM