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

版权声明:本文为博主原创文章,转载请注明出处-- https://blog.csdn.net/qq_38790716/article/details/89475618
1.函数模板与类模板的区别

相同点:

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

不同点:

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

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

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

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

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

上面的 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;、…… 全是模板类。

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

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

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

在运用的时候,可以显式( e x p l i c i t l y 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;……

也可以在使用的过程中由编译器进行模板参数推导,帮你隐式( i m p l i c i t l y 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 )或者隐式( i m p l i c i t l y 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;…… 都是模板函数。

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

猜你喜欢

转载自blog.csdn.net/qq_38790716/article/details/89475618