template<class T>

转载 2013年12月03日 13:41:35

模板 使用中注意的问题 template<class T>

  (2011-10-03 17:38:57)
标签:  

模板

   

template

   

c

   

代码重用机制

   

模板函数

分类: 学习笔记C加加

c++集合了过程式语言,通用语言,面向对象语言的众多特点。模板是通用语言的特性,模板又叫参数化类型(parametrized types)。

模板的定义。以下是模板定义的一般格式:

  template <class any>//class 也可以换成typename,后者是新来的。

  void swap(any &a,any &b)

  {

  ......

  }

利用模板机制可以显著减少冗余信息,能大幅度地节约程序代码,进一步提高面向对象程序的可重用性和维护性。

 

在使用过程中,注意的问题:

(1)在template语句与函数模板定义语句之间不允许有别的语句。

     template<class T>

     int i;          // 错误,不允许插入别的语句

     T max(T x,T y)

(2)模板函数类似于重载函数,只不过它更严格一些。函数被重载的时候,在每个函数体内可以执行不同的动作。但同一个函数模板实例化后的所有模板函数都必须执行相同的动作。例如,下面重载函数就不能用模板函数代替,因为它们所执行的动作是不同的。

     void outdate(int i)

     {  cout<<i; }

     void outdata(double d)

     {  cout<<"d="<<d>>endl; } 

(3)在函数模板中允许使用多个类型参数。但是应当注意template定义部分的每个类型参数前必须有关键字class(typename)。

      #inculde<iostream.h>

      template<typename type1,ypename type2>

      void myfunc(type1 x,type2 y)

      {  cout<<x<<' '<<y<<endl; }

      main()

      {

         myfunc(10,"hao");

         myfunc(0.123,10L);

         return 0; 

      }

(4)函数模板的异常处理。函数模板有一个特点,虽然函数模板中德类型参数T可以实例化为各种类型,但是采用类型参数T的每个参数必须实例化成完全相同的类型。模板类型不具有隐式的类型转换。如果不注意这一点,可能产生错误。

     template<class T>

     T max(T x,T y)

     {  return (x>y)?x:y; }

     void fun(int i,char c)

     {

        max(i,i);       // 正确,调用max(int,int)

模板声明中template <typename T>和template <class T>

在c++Template中很多地方都用到了typename与class这两个关键字,而且好像可以替换,是不是这两个关键字完全一样呢? 相信学习C++的人对class这个关键字都非常明白,class用...
  • bug07250432
  • bug07250432
  • 2013年08月21日 16:00
  • 706

C++中template<class T> && template <typename T>(模板区分)

问题:在下面的 template declarations(模板声明)中 class 和 typename 有什么不同?  template class Widget; // use...
  • wisdom605768292
  • wisdom605768292
  • 2013年08月10日 17:35
  • 2093

C++ 模板template<class T>和template<typename T>有区别吗?

template和template都可以用来定义函数模板和类模板,在使用上,他们俩没有本质的区别。 在C++早期版本中,没有typename这个关键字,所以在模板定义的时候便使用了class。在C+...
  • skyleung
  • skyleung
  • 2014年12月27日 18:36
  • 2265

C++类模板 template <class T>

类模板与函数模板的定义和使用类似,我们已经进行了介绍,如果您对函数模板也感兴趣,请查看:。 有时,有两个或多个类,其功能是相同的,仅仅是数据类型不同,如下面语句声明了一个类: class Com...
  • oqqQuZi1234567
  • oqqQuZi1234567
  • 2015年02月04日 17:38
  • 15598

模板 使用中注意的问题 template<class T>

from http://blog.sina.com.cn/s/blog_610c1cad01014gfo.html c++集合了过程式语言,通用语言,面向对象语言的众多特点。模板是通...
  • occupy8
  • occupy8
  • 2014年03月29日 20:52
  • 1515

<vector> template实现

#include /********************************* vector *******************************************...
  • Decload
  • Decload
  • 2012年01月23日 14:45
  • 1614

C++ - 类模板(class template) 详解 及 代码

类模板(class template) 详解 及 代码   本文地址: http://blog.csdn.net/caroline_wendy   类模板(class template)需要添加模板参...
  • u012515223
  • u012515223
  • 2013年11月23日 21:20
  • 7909

C++中的模板template <typename T>

这个是C++中的模板..template 这个是定义模板的固定格式,规定了的..模板应该可以理解到它的意思吧.. 比如你想求2个int float 或double型变量的值,只需要定义这么一个函数就...
  • u013035197
  • u013035197
  • 2016年05月21日 22:19
  • 5924

template关键字typename和class的区别,以及模板默认参数

template关键字typename和class的区别问题:在下面的 template declarations(模板声明)中 class 和 typename 有什么不同?template cla...
  • anye3000
  • anye3000
  • 2011年06月29日 12:00
  • 4388

模板(template)中typename的使用方法

声明template参数时, 前缀关键字class和typename可以互换; 使用关键字typename标识嵌套从属类型名称, 但不需在基类列表和成员初始化列表内使用. 从属名称(depen...
  • darennet
  • darennet
  • 2014年11月09日 16:10
  • 18587
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:template<class T>
举报原因:
原因补充:

(最多只允许输入30个字)