【问题标题】:What is the difference between function template and template function?函数模板和模板函数有什么区别?
【发布时间】:2010-11-10 04:55:58
【问题描述】:

函数模板和模板函数有什么区别?

【问题讨论】:

标签: c++ templates terminology


【解决方案1】:

术语“功能模板”是指一种模板。术语“模板函数”有时用于表示同一事物,有时表示从函数模板实例化的函数。最好避免这种歧义,前者使用“函数模板”,后者使用“函数模板实例”或“函数模板的实例”之类的东西。请注意,函数模板不是函数。同样的区别适用于“类模板”与“模板类”。

来自this FAQ (archive)

【讨论】:

  • 同意一般观点,但是,我不同意“函数模板的实例”是使用术语的常见问题解答。恕我直言,“功能模板专业化”更接近标准术语。还有一个问题是如何调用本身不是模板但属于类模板成员的函数和类。它们与函数模板有很多共同点,但称它们为“函数模板”是不正确的。
  • 我的印象是,当人们说“模板专业化”时,他们的意思是明确定义的部分或完全专业化(在函数模板的情况下显然总是完整的),而不是函数/类编译器根据模板的定义创建。我经常看到用于后者的“实例化”。该标准是否也将后者称为专业化?
  • 恕我直言,诸如“A ”之类的名称是一种专业化,无论其上下文如何。它可以用作显式实例化或显式或部分特化的一部分。但我也认为它是一种用于声明对象的特化,例如:“A * a;”。关于标准,14.2/1 描述了模板专业化 (14.7) 如何被语法术语“模板 ID”引用,而 14.7 包括隐式实例化。
  • 谢谢,我尽量不滥用标准术语。
  • 链接已失效。
【解决方案2】:

Comeau Computing(C++ Comeau Compiler 的制造商)在其网站上有一个常见问题解答,其中包含该问题的答案:

What is the difference between a template function and a function template?

问候,
风向标

【讨论】:

    【解决方案3】:

    函数模板是正确的术语(用于实例化函数的模板)。

    模板函数是一个口语同义词。

    所以,没有任何区别。

    【讨论】:

      【解决方案4】:

      编译器从函数模板(泛型函数)为指定数据类型生成的函数称为模板函数。 例子: 下面的代码称为函数模板,因为它是函数的模板。

      template<T>
      T doubleVal(T a){
        return a+a;
       }
      int main(){
        cout<<doubleVal<int>(5)<<endl;
      }
      

      当我们编译这段代码时,编译器会通过模板函数的引用为 int 编写一个函数。该函数称为模板函数。

      【讨论】:

        猜你喜欢
        • 2021-02-14
        • 1970-01-01
        • 2022-01-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-13
        • 1970-01-01
        相关资源
        最近更新 更多