c++的template中的class和typename .
2012-09-12 10:07
417 查看
template(模板)是一些函数或者类,这些类中有一些参数的类型没有指定,需要运行时确定。比如:
其中T在调用这一函数的时候指定。T可以命名为其他变量,但是习惯上命名为T。
T的类型被分类为class(类),但是T也可以不是一个class,上面的例子可以是int等基本类型,更进一步上来说T可以是提供了template中使用的方法的类型,比如重载了运算符的类。
上面的class一般情况下可以用typename替代,上面的例子表示为:
一般情况下不会有问题,当T是一个类的时候使用typename也是没有问题的,但是在模板类中嵌套模板的时候会报错。
typename主要用于在模板中指定后面的标识符为一个类型,比如:
上面的ptr是一个T::SubType类型的指针,如果不使用typename的话会被当做一个T的静态成员。
类似上面的模板类在实例化的时候传入的类需要有一个SubType,不然会报错。
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,不然会报错。
相关文章推荐
- C++ 模板template<class T>和template<typename T>有区别吗?
- C++ template<typename T> 和 template<class T>
- C++ template typename class
- C++ templete: "class" vs "typename" in a template-parameter
- <转载>模板声明中template <typename T>和template <class T>
- Why C++ Supports both Class and Typename for Type Parameters
- evil C++ -- template typename vc and GNU compiler
- C++之template <typename T>
- 初学c++之template <typename T>
- c++ class does not name a type (转载)
- C++中template<class T> && template <typename T>(模板区分)
- C++ difference of keywords 'typename' and 'class' in templates
- NDK编译c包含C++头文件 error: unknown type name 'class' 的解决方法
- Why C++ Supports both Class and Typename for Type Parameters
- C++ 问题 unknown type name 'class' c中头文件在cpp文件中引用和.h文件引用的思考
- Typename in C++ Template
- NDK编译c包含C++头文件 error: unknown type name 'class' 的解决方法
- c++ class does not name a type
- Why C++ Supports both Class and Typename for Type Parameters
- c++ template<typename T>