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
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