关于模板声明中声明的措辞不清楚

用户名

14/1 [temp] 提供:

模板声明中的声明应

(1.1)—声明或定义函数,类或变量,或

(1.2)—定义类模板或嵌套在类模板中的类的成员函数,成员类,成员枚举或静态数据成员,或

(1.3)—定义类或类模板的成员模板,或

(1.4)—是别名声明。

第二个项目符号尚不清楚,因为它看起来像我们无法声明和定义类模板的成员一样。但实际上我们可以做到这一点:

template <class U>
struct A
{
    template<class T>
    void foo();
};

int main(){}

G ++

并且可以通过clang和gcc进行编译。oyu能解释一下这是什么意思吗?

哥伦布
template <class U>
struct A
{
    template<class T>
    void foo();
};

如您所见,该声明void foo();有效的函数声明。因此,第一个要点适用:

声明模板声明

  • 声明或定义函数,类或变量,或
  • 定义类模板或嵌套在类模板中的类的成员函数,成员类,成员枚举或静态数据成员,或

成员功能在第二个项目符号中被提及只是为了强调

template<class T>
void A<T>::foo() {}

已验证; 声明在此模板的声明void A<T>::foo() {})是一个成员函数的定义。“或”不是唯一的,因为上面的声明仍然是函数定义。

现在清楚的是,这仅涉及定义,因为

template<class T>
void A<T>::foo();

仍然无效。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章