类模板和模板类

ckv*_*ckv 3 c++ templates

类模板和模板类之间是否存在差异.如果是这样的话是什么?

Jul*_*ano 10

当使用这两个术语时,存在非常微妙的差异.它比语义更具语言性,它取决于您正在修改的单词.

简而言之,类模板是一种特殊的模板.模板可以定义类或函数.类模板是定义类的模板.看到不同:

template <typename T> class SomeClass {...};      // this is a class template
template <typename T> int some_function(T&) {...} // this is a function template
Run Code Online (Sandbox Code Playgroud)

一个模板类是一种特殊的类.类有很多种,特别是模板类是使用类模板定义的类.对比:

SomeClass sc;         // SomeClass is an ordinary (non-template) class
SomeClass<int> sc;    // SomeClass<int> is a template class
Run Code Online (Sandbox Code Playgroud)

来自Stroustrup的C++词汇表:

template class - 按类型,值或模板参数化的类.必须在使用模板类的地方提供标识要为类模板生成的类所必需的模板参数.例如," vector<int> v;"从矢量模板生成一个int矢量.另见模板.TC++ PL 13.2,D&E 15.3.

两种表达式都用于Stroustrup的书"C++编程语言"和ISO/IEC C++标准,直到1998年.

注意:正如下面的评论中所讨论的,似乎C++ 03不再使用术语"模板类"(尽管我没有它的副本),可能是为了减少混淆.正如我之前所说,它们基本上是相同的,它只是语言上的差异:在模板上下文中,您引用特定类型的模板,或者在类上下文中引用特定类的类.如果你只是坚持"课堂模板",你就不会失去任何东西.

更多的思考:

  • 但在标准中,术语*模板类*不再使用.它在C++ 98标准中有时被用作*类模板*的同义词,有时意味着不同的东西(差异在标准C++之前进行,并在ARM中进行了解释).在C++ 03修订版中,这个术语被删除了,术语*类模板特化*被用来代替*template class*. (2认同)