C++模板和泛型实用经验

文章内容均整理自    刘光《C++程序员不可不知的101条实用经验》

1.将模板的声明和定义放到一个文件中
请谨记:
(1)模板实现由3种方法:声明和实现在同一个头文件中;声明和实现分离,包含头文件;实用关键字export分离
(2) 建议选择声明和实现在同一个头文件中,因为其他两种实现都各有缺陷

2.区分继承、模板及组合
注意
(1)当对象的类型不影响类中函数的行为时,就要使用模板来生成这样一组类
(2)当对象的类型影响类中函数的行为时,就要使用继承来得到这样一组类
(3)当对象好而对象的关系是is kind of时选择继承,是a part of时选择组合

3.区分函数模板与模板函数、类模板和模板类
①函数模板和模板函数
函数模板指用于生产实例函数的模板。而模板函数则是模板所产生的函数。两者的关系是函数模板特例化而生成的函数就是模板函数
函数模板的一般定义形式如下:
tmplate <class或者typename T>
返回类型  函数名(形参表)
{
        //函数定义体
}
说明:
(1)template是一个声明模板的关键字,表示声明一个模板关键字class不能省略,如果类型形参多于一个,每个形参前都要加class<l类型 形参表>,可以包含基本数据类型,也可以包含类类型。
(2)在函数慕伙伴被调用时,编译器根据实际参数的类型确定模板参数T的类型,并自动生成一个对应的函数,即模板函数。模板参数的类型不同,生成的模板函数也不同
(3)模板函数类似于重载函数,但两者有很大的区别:函数重载时,每个函数体内可以执行不同的动作,但同一个函数模板实例化后的模板函数都必须执行相同的动作
模板函数的一般定义形式如下:
返回类型 函数名<数据类型参数标识符>(形参表)
{
        //函数定义体
}
②类模板和模板类
类模板和模板类的关系与函数模板和模板函数类似。类模板强调模板,由此类模板生成的具体类称为模板类。
类模板的定义如下:
template <class或typename T>
class 类名
{
        //类定义
};
说明:
(1)template是声明各模板的关键字,表示声明一个模板,模板参数可以使一个,也可以是多个
(2)在类中凡是采用标准数据类型的数据成员,函数成员的参数都必须加上类型标识符;返回类型也是如此
(3)如果类的成员函数在类声明之外定义,则类的成员函数声明必须是函数模板形式,其定义形式如template <class T>返回类型标识符 类名<class T>::函数名(T 形参1,形参2...);
将类模板实例化后生成的具体类,就是模板类。模板类的一般形式为:
类名<class T>对象1,对象2,....对象n;

猜你喜欢

转载自blog.csdn.net/sinat_39061823/article/details/80569456
今日推荐