模板(Template)

为什么使用模板?

模板可以解决重载函数定义不全面的问题。

模板的定义:实现代码重用机制的工具,可以实现类型参数化(把类型定义为参数),从而实现真正的代码重用。

模板参数分为两类:函数模板,类模板

(1)函数模板的写法:

Template<class或者也可以用typename T>

返回类型 函数名(形参表)

{//函数体}

说明:template是一个声明模板的关键字,表示声明一个模板关键字class不能省略,如果类型形参多余一个,每个形参前都要加class<类型形参表>可以包含基本数据类型也可以包含类类型。

测试用例:

template<class T>

T min(T x, T y)

{

return (x<y)?x:y;

}

void main()

{

int nx = 2, ny = 10;

float fx = 2.0, fx = 6.7;

cout<<min(nx, ny)<<endl;

cout<<min(fx, fy)<<endl;

}

(2)类模板的写法

定义类模板:

Template<class 或者也可以用typename T>

class类名

{

//类定义...

};

template是声明模板的关键字,声明一个模板,模板参数可以是一个,也可以是多个。

测试用例:

template<typename T1, typename T2>

class myClass

{

private:

T1 name;

T2 sur;

public:

myClass(T1 x,T2  y);

void show();

};

template<typename T1, typename T2>

myClass<T1,T2>::myClass(T1 x,T2 y):name(x),sur(y){}

template<typename T1, typename T2>

void myClass<T1, T2>::show

{

cout<<"name = "<<name<<", sur="<<sur<<endl;

}

void main()

{

myClass<in,int>classx(2,3);

classx.show();

myClass<int,char> classy(3,'a');

classy.show();

}

(3)非类型模板参数

非类型模板参数可以是常整数(包括枚举)或者指向外部链接对象的指针。

则,浮点数是不行的,指向内部链接对象的指针也是不行的

(4)模板的特化

给模板函数(类)的某个特定类型写一个函数,就需要用到模板的特化。

所谓特化,就是代替编译器完成对指定类型的特化工作,现代的模板库中,大量的使用这个技巧。

偏特化,则只针对模板类型中部分类型进行特化。

(5)仿函数

对象和函数指针等都可以被作为参数传递,或作为变量保存。所以可以把一个仿函数传递给一个函数,由这个函数根据需要来调用这个仿函数。

STL模板库大量使用这种技巧,来实现库的灵活。








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值