C++中函数模板与类模板、模板类与类模板、模板函数与函数模板的区别

1.函数模板与类模板的区别

相同点:

  • 1.以关键字template开始,后跟一个模板参数列表
  • 2.两者定义的类型参数目的相同,都是将数据的类型参数化

不同点:

  • 1.函数模板的实例化是由编译程序在处理函数调用时自动完成的;而类模板的实例化必须由程序员在程序中显式地指定。即函数模板允许隐式调用和显式调用,而类模板只能显示调用
2.类模板——模板类(class template——template class)

类模板的重点是模板。表示的是一个模板,专门用于产生类的模子。例子:

template <typename T>
class Vector
{
    ...
};

使用这个 V e c t o r Vector Vector模板就可以产生很多的 c l a s s class class(类), V e c t o r &lt; i n t &gt; Vector&lt;int&gt; Vector<int> V e c t o r &lt; c h a r &gt; Vector&lt;char&gt; Vector<char> V e c t o r &lt; V e c t o r &lt; i n t &gt; &gt; Vector&lt; Vector&lt;int&gt; &gt; Vector<Vector<int>> V e c t o r &lt; S h a p e ∗ &gt; … … Vector&lt;Shape*&gt;…… Vector<Shape>

模板类的重点是类。表示的是由一个模板生成而来的类。例子:

上面的 V e c t o r &lt; i n t &gt; 、 V e c t o r &lt; c h a r &gt; 、 … … Vector&lt;int&gt;、Vector&lt;char&gt;、…… Vector<int>Vector<char>全是模板类。

3.函数模板——模板函数(function template——template function)

函数模板的重点是模板。表示的是一个模板,专门用来生产函数。例子:

template   <typename   T>  
void   fun(T   a)  
{  
  ...
}   

在运用的时候,可以显式( e x p l i c i t l y explicitly explicitly)生产模板函数, f u n &lt; i n t &gt; 、 f u n &lt; d o u b l e &gt; 、 f u n &lt; S h a p e ∗ &gt; … … fun&lt;int&gt;、fun&lt;double&gt;、fun&lt;Shape*&gt;…… fun<int>fun<double>fun<Shape>

也可以在使用的过程中由编译器进行模板参数推导,帮你隐式( i m p l i c i t l y implicitly implicitly)生成。

  fun(6);//隐式生成fun<int>  

  fun(8.9);//隐式生成fun<double>  

  fun(‘a’);//   隐式生成fun<char>  

  Shape*   ps   =   new   Cirlcle;  

  fun(ps);//隐式生成fun<Shape*>  

模板函数的重点是函数。表示的是由一个模板生成而来的函数。例子:

上面显式( e x p l i c i t l y explicitly explicitly)或者隐式( i m p l i c i t l y implicitly implicitly)生成的 f u n &lt; i n t &gt; 、 f u n &lt; S h a p e ∗ &gt; … … fun&lt;int&gt;、fun&lt;Shape*&gt;…… fun<int>fun<Shape>都是模板函数。

参考:模板类与类模板、函数模板与模板函数等的区别

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值