类定义的开始

时间:2011-02-16 08:46:54

标签: c++ class

形式上(从std引用是理想的),从这一点开始这个类的定义:

template<typename T>
class X
{
};

2 个答案:

答案 0 :(得分:4)

  

此类的定义从此开始

从编译器开始解析与类相关的事情。在您的示例中,单词template的字母“t”是开头,因此是定义点!

顺便说一下,有两件相关的事情。阅读本文:

定义点 vs 实例化点

  

模板的定义点   就在它的前面   定义。在这个例子中,重点   功能模板的定义   g(T)位于之前   关键字模板。因为功能   call f(123)不依赖于a   模板参数,编译器会   考虑在之前宣布的名字   功能模板g(T)的定义。   因此,呼叫f(123)将呼叫   F(双)。虽然f(int)更好   匹配,它不在范围内   g(T)的定义。

     

实例化的   模板位于之前   封闭其使用的声明。   在这个例子中,重点   实例化调用   g(234)立即定位   于我之前()。因为函数调用   h(a)取决于模板参数,   编译器会考虑名称   在实例化之前声明   功能模板g(T)。因此,   呼叫h(a)将呼叫h(双)。它会   不考虑h(int),因为这个   功能不在范围内   实例化g(234)。

引自Name binding and dependent names (C++ only)

虽然,它谈到了函数模板,但类模板也是如此。

答案 1 :(得分:1)

这是一个类模板,它的定义从单词template开始。

来自标准文档。 14.1

  

模板定义了一系列类或函数,或者是一类类型的别名   template-declaration: exportopt template < template-parameter-list > declaration

  

模板声明是一种声明。 如果模板声明的声明定义了一个函数,那么它也是一个定义,   类或静态数据成员。

因此,正式地,模板声明是模板化类的定义,它以示例中的单词template开头。