您的位置:首页 > 编程语言 > C语言/C++

c++的template中的class和typename .

2012-09-12 10:07 417 查看
template(模板)是一些函数或者类,这些类中有一些参数的类型没有指定,需要运行时确定。比如:

template <class T>
T add(T a, T b)
{
return a + b;
}


其中T在调用这一函数的时候指定。T可以命名为其他变量,但是习惯上命名为T。

T的类型被分类为class(类),但是T也可以不是一个class,上面的例子可以是int等基本类型,更进一步上来说T可以是提供了template中使用的方法的类型,比如重载了运算符的类。

上面的class一般情况下可以用typename替代,上面的例子表示为:

template <typename T>
T add(T a, T b)
{
return a + b;
}


一般情况下不会有问题,当T是一个类的时候使用typename也是没有问题的,但是在模板类中嵌套模板的时候会报错。

typename主要用于在模板中指定后面的标识符为一个类型,比如:

template <class T>
class MyClass
{
typename T::SubType * ptr;
// ...
}


上面的ptr是一个T::SubType类型的指针,如果不使用typename的话会被当做一个T的静态成员。

类似上面的模板类在实例化的时候传入的类需要有一个SubType,不然会报错。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: