【问题标题】:"class template" versus "template class" [duplicate]“类模板”与“模板类”[重复]
【发布时间】:2010-12-09 07:50:28
【问题描述】:

可能重复:
What is the difference between a template class and a class template?

我见过几位 C++ 大师因为调用类似

的东西而抨击人们
template <typename T>
class SomeClass
{
    //...
};

模板类而不是类模板。 (请注意,这不是一个巨大的裂痕,但表明某人不是经验丰富的 C++ 程序员)是的,正确的词是“类模板”——因为它是用于生成类的模板。

但我不明白为什么在典型的对话中区分很重要。没有人听/读你写的东西会理解你在说什么。

在标准中是否对“模板类”一词进行了某些特定使用,或者以其他方式严重错误地使用了这些词?

【问题讨论】:

  • 不要忘记,有很多人坚持“把事情做对”。
  • @sharptooth:我完全赞成挑剔答案中的次要技术或迂腐部分(毕竟我是一名 C++ 程序员)。但通常此评论是针对发表评论的人,而不是针对答案的内容。
  • @Charles:很公平。投票结束我自己的问题哈哈。
  • 两个链接的问题都包含一些人附加到“模板类”的其他解释。

标签: c++ templates standards


【解决方案1】:

根据this page

注意术语之间的区别 类模板和模板类:

  • 类模板 是用于生成模板类的模板。你不能声明 类模板的对象。
  • 模板类 是类模板的一个实例。

这个MSDN 页面似乎同意这个定义:

与函数模板不同,当 实例化一个类模板,你 必须显式实例化类 通过给出类的论点 模板。

[...]

编译器生成代码 模板类或函数,当类或函数被实例化时。

【讨论】:

    【解决方案2】:

    快速搜索:

    问: 函数模板和函数模板有区别吗 模板函数,或在类模板和 模板类?

    答: 术语“功能模板”是指一种模板。 术语“模板函数”有时用于表示 同样的事情,有时意味着实例化的函数 从函数模板。最好避免这种歧义 通过对前者使用“功能模板”等 像“函数模板实例”或“一个 函数模板”为后者。注意一个函数 模板不是函数。相同的区别 适用于“类模板”与“模板类”。

    对我来说很有意义。

    【讨论】:

    【解决方案3】:

    我个人不会更正,但我可以看到它背后的逻辑。这与将超类称为子类没有什么不同,反之亦然。他们所说的本质上是不正确的,并不意味着同样的事情。

    重要的是,尤其是对于初级程序员而言,要从代码的角度进行思考,而当您错误地将语言翻译回英文时,这是不可能的。

    【讨论】:

    • 嗯.. 事情是我强烈不同意它就像子/超类的类比。如果将这两者混为一谈,混淆几乎是不可避免的。如果将“类模板”和“模板类”混为一谈,几乎不会发生混淆。
    • @Billy:也许这个比喻太强了,但这个想法仍然成立……忘记何时使用 sub 和何时使用 super 之间的区别是初级程序员的常见错误,可能只是因为它们的视觉相似性。我并不是说我担心它会引起混乱,而是我认为如果差异得到澄清,我认为这是在帮助某人并帮助他们的技能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-27
    • 2017-10-26
    • 2020-12-16
    • 1970-01-01
    • 2016-02-25
    • 1970-01-01
    • 2020-07-25
    相关资源
    最近更新 更多