Not*_*ure 113
对于许多人来说,这是一个常见的混淆点(包括维基百科上的通用编程页面,一些C++教程以及此页面上的其他答案).就C++而言,没有"模板类"这样的东西,只有"类模板". 读取该短语的方式是"类的模板",而不是"函数模板",它是"函数的模板". 再次:类不定义模板,模板定义类(和函数).例如,这是一个模板,特别是一个类模板,但它不是一个类:
template<typename T> class MyClassTemplate
{
...
};
Run Code Online (Sandbox Code Playgroud)
声明MyClassTemplate<int> 是一个类,或者说是一个基于模板的类. 基于模板的类与不基于模板的类没有特殊属性. 特殊属性是模板本身.
短语"模板类"没有任何意义,因为就"C++"而言,"模板"一词在应用于名词"类"时没有作为形容词的含义.它意味着一个的存在类即是(或限定)一个模板,这是不存在在C++概念.
我理解常见的混淆,因为它可能基于这样的事实:单词出现在实际语言中的"模板类"的顺序中,这是另一个故事.
Joh*_*itb 11
不同之处在于术语"模板类"在C++标准中根本不存在.这个词主要被那些认为"类模板"这个词混淆的人使用(比如Qt公司的诺基亚和以前的奇趣科技).
标准没有它的概念,所以它取决于其他人.有些人同义地使用它,而其他人说术语"模板类"指的是实例化或显式专用的类模板,这将使其等同于术语"类模板专门化".从历史上看,它具有这种意义.该注释的参考手册定义的343页
从类模板生成的类称为模板类,特别是使用template-class-name作为其名称定义的类
非终端模板类名称相当于今天标准中使用的非终端模板ID,并且下降template-name < arguments >.
让你熟悉今天的条款,这比使用可疑的旧条款更重要
// (1) defines a class template
template<typename T> class A { };
// (2) defines a class template explicit specialization
template<> class A<int> { };
// (3) defines a class template partial specialization
template<typename T> class A<T*> { };
// (4) explicitly instantiates A<char>.
template class A<char>;
// (5) implicitly instantiates A<short> (because of the member declaration)
struct D { A<short> a; };
Run Code Online (Sandbox Code Playgroud)
C++的创建者Bjarne Stroustrup在其着作"C++编程语言"第4版,23.2.1定义模板中说:
有人在术语类模板和模板类之间进行语义区分.我不; 这太微妙了:请考虑这些术语是否可以互换.同样,我认为功能模板可与模板功能互换.
| 归档时间: |
|
| 查看次数: |
35870 次 |
| 最近记录: |