文章目录
- 共同点
- typename特性
- class特性
共同点
在定义类模板或者函数模板时,typename 和 class 关键字都可以用于指定模板参数中的类型。
template <class T>
template <typename T>
typename特性
C++ 允许在类内定义类型别名,且其使用方法与通过类型名访问类成员的方法相同。
class classA
{
public:
typedef int Container;
};
template<typename T>
class classB
{
T::Container b;
};
在类定义不可知的时候,编译器无法知晓T::Container具体指的是一个【类型】or【类内成员(静态数据成员、静态函数等)】。
- 模板的定义与实例化是分离的,模板定义是通用的不依赖于任何特定的类型参数。编译器在模板实例化期间确定T代表classA,但在模板定义阶段,编译器无法直接知道T::Container是一个类型。
typename的作用就是告诉c++编译器,typename后面的字符串为一个类型名称,而不是成员函数或者成员变量
class特性
C++模板中关键字typename与class的区别