C++模板

template是关键字,template之后是 模板形参表。模板形参表是用尖括号括住的一个或者多个模板形参的列表。

1.模板函数
template <typename T> //没有分号
[inline] int compare(const T &V1 ,const T &V2) //和上面的是一个语句
{
//do something
}


使用函数模板时,编译器会推断哪个(或者)那些模板实参绑定到模板形参,一旦编译器确定了实际的模板实参,就称它实例化了函数模板的一个实例。
compare(1,0);//初始化为int


2.模板类
template <class Type> class Queue
{
public:
Queue();
Type &front (); //return element from head of Queue
..........
}
与调用函数模板形成对比,使用类模板时,必须为模板形参显式制动实参。
Queue<int> qi; //Queue that holds ints
Queue< vector<double> > qc; //Queue that holds vectors of doubles


typename 与class的区别:
在函数模板形参表中typename和class具有相同的含义,可以互换使用。
template <typename T,class U> calc (const T&,const U&);
用typename更直观的指出后面是个类型名。
typename是作为标准C++的组成部分加入C++中的,因此旧的程序可能只用class.

3.在模板内部指定类型。
template <class Parm,class U>
Parm fcn(Parm* array ,U value)
{
Parm::size_type *p;
}
我们只能知道size_type是Parm的成员,但是我们不知道size_type是一个类型成员的名字还是一个数据成员的名字,在默认情况下,编译器假定这样的名字指定数据成员,而不是类型。
如果希望编译器将size_type当做类型,则必须显示告诉编译器这样做:
typename Parm::size_type *p;
在类型前用typename没有害处,因此,即使typename是不必要的,也没有关系。

以上都来自于c++primer

额,网上又看到typename和class的不同- -!有时间看看
http://dev.yesky.com/13/2221013.shtml
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值