为什么在 C++ 模板中使用 typename 或 class 关键字?

问题描述

在定义模板以使用自定义数据类型时,我们遵循如下语法:

template<class T> 
class Operators{ 
        public:
                T variable1 ;
}

为什么我们需要在这里使用“class”关键字,为什么简单的模板不起作用,还有很多地方也用“typename”代替“class:”,再说一遍,为什么要使用?

还有什么时候用“class”关键字,什么时候用“typename”关键字?

解决方法

使用 class 或 typename 是完全相同的事情,主要是偏好问题。

有些人更喜欢使用 typename,因为类型可能不是类,因此 typename 看起来更清晰。

问题是关键字 typename 有另一个用途,因此将两者放在同一行可能会非常混乱:

template<typename Vector,typename Iterator = typename Vector::iterator>

在这种情况下,类可以帮助改善一些差异。

template<class Vector,class Iterator = typename Vector::iterator>
,

template class 定义了一个模板类

template void f() 定义了一个模板函数

template using t 定义了一个模板别名

为什么我们需要在这里使用“class”关键字,为什么简单的模板不起作用

因为 template 不是类所独有的。

还有什么时候用“class”关键字,什么时候用“typename”关键字?

在这种情况下,它们是确切的同义词和偏好问题。选择一个并坚持下去。