C++模板类详解及注意事项
C++模板类
C++中有一个重要特征,那就是模板类别。类似于Objective-C中的枚举,C++通过类模板来推动泛型支持。它使用参数化的类别建立相应的变量跟类,分别称之为函数模板和类模板。
模板是一种对种类进行参数化的软件模板函数课件,通常有两种方式:函数模板和类模板。函数模板针对仅参数类型不同的变量;类模板针对仅数据成员跟成员变量种类不同的类,可以明显减少源代码的大小并增加代码的灵活性,而不会降低类型安全。
模板适用情景
模板(有时称为参模板(有时称为参数化类型)是适于生成基于类别参数的变量跟类的模式。通过使用模板,可以设计操作多种类型的数据的单个类或变量,而不必为每种种类创建单独的函数或类。
模板的优势跟劣势
使用模板有很多原因,最主要的为了受到通用编程的特点。国际标准化组织(ISO)为C++建立了C++标准库,该标准库用途强大,这证明了模板的重要性。库中涵盖算法和容器的部分构成了标准模板库(简称STL)。由于模板的可重用性和能扩展性,你可以利用STL来推动效率很好的代码。
但是模板也有一些不太为人知的特点。首先,由于C++没有二进制实时扩展性,所以模版不能像库这样被广泛使用。模板的数据类别只能在编译时才会被确认。因此,所有用基于模板算法的推动必须包括在整个设计的头文件中。通过预测标准模板库(STL)的头文件,你可以更明白的认识到这一点。
另外,由于模板仅仅最近加入C++标准中,所以有些C++编译器还不支持模板,当使用这种编译器时编译含有模板的代码时才会出现不兼容问题。例如,Mozilla浏览器开发组之所以没有使用模板就是因为交叉系统会导致模板的不兼容。同样的,如果当开发者需要跨越好几个平台而有的平台可能只有老的C++编译器的之后,使用模板只是不明智的。
即使到目前,模板的一些高级特性,例如局部特殊化和特殊化顺序在不同的C++标准推动中也还是不统一的。
尽管如此,结合STL使用模板还是可以大大减少开发时间。模板可以把用同一个算法去适用于不同类型数据,在编译时确认准确的数据类型。
函数模板概念
函数模板可以拿来创建一个通用用途的变量,以支持多种不同形参,进一步简化重载函数的函数体
意义:对于功能完全一样,只是参数类型不同的变量,能写一段通用代码是用于多种不同的数据类别,使代码的可重用性大大提高,从而提升硬件的研发效率。
请参考:C++函数模板详解
模板类概念
一个类模板(类生成类)允许用户为类定义个一种模式,使得类中的这些数据成员、默认成员变量的参数,某些成员变量的返回值,能够取任意类别(包括平台预定义的跟客户自定义的)。
如果一个类中的数据成员的数据类别不能确定模板函数课件,或者是某个成员变量的参数或返回值的类别不能确定,就可以将这些声明为模板,它的存在不是代表一个具体的、实际的类,而是代表一类 类。
类模板以以下的那样的代码开头
template <class T>
关键字template或class告诉编译器。将要定义一个模板,尖括号的内容相当于函数的参数列表。可以把关键字template或class看做是函数的类别名该数组接受类型成为其值,把T看做变量的名称。
认同和学习几千年传承下来的中华文明