【问题标题】:Why to use the typename or class keyword in c++ templates? [duplicate]为什么在 c++ 模板中使用 typename 或 class 关键字? [复制]
【发布时间】:2021-06-30 09:14:41
【问题描述】:

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

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

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

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

【问题讨论】:

  • 请提供完整的示例代码,其中出现此类语法,包括所有必要的定义
  • 没有像整数值这样的类型模板参数。
  • 正如 Marek 所说,你可以有一个非类型的模板,例如template &lt;typename T, std::size_t N&gt; class Array,同用法Array&lt;std::string, 5&gt; myArray;
  • 链接的“重复”问题是另一个主题。

标签: c++ templates keyword typename


【解决方案1】:

使用类或类型名是完全一样的,而且主要是一个偏好问题。

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

问题是关键字 typename 有其他用途,因此在同一行中可能会非常混乱:

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

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

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

【讨论】:

    【解决方案2】:

    template class 定义了一个模板类

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

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

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

    因为template 不是类独有的。

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

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

    【讨论】:

    • 谢谢你的回答,但是我问了为什么要写模板,为什么不能只写模板
    猜你喜欢
    • 1970-01-01
    • 2011-01-02
    • 1970-01-01
    • 2011-05-30
    • 1970-01-01
    • 2011-12-16
    • 1970-01-01
    • 2021-01-27
    • 1970-01-01
    相关资源
    最近更新 更多