CPP:定义模板时,通用数据类型T是否为类

时间:2018-08-15 20:45:02

标签: c++

定义模板时,格式为:

template <class T> returnType templateName{...};

我的问题是:上面模板声明中的class关键字会使数据类型T成为类吗?问题说明如下:

<class T>内的

中,T应该是数据类型的名称,并以“ class”开头。在cpp中学习课程时,我知道定义了一个课程:class ClassName{...};。因此,我的理解是,所有带有class关键字的内容都将是一个类的名称。对于模板声明,在class之前还有一个T关键字。这是否意味着CPP中的数据类型也是类?

1 个答案:

答案 0 :(得分:4)

  在<class T>内的

内,T应该是数据类型的名称,并以“ class”开头。这是否意味着CPP中的数据类型也是类?

答案是“否”。

在定义模板时,无论是类模板还是功能模板,都可以使用typename以及classtypename是更准确的描述,但也支持class,这很可能是出于历史原因。

因此

template <typename T> struct Foo {};

相同
template <class T> struct Foo {};

您可以通过使用任何类型作为模板参数来创建对象。它可以是基本类型之一,也可以是用户定义类型(aka class es / struct s)之一。

给出上面的类模板,可以使用:

struct Bar {}; // User defined type

Foo<Bar> f1;   // Using user defined type to create the object f1
Foo<int> f2;   // Using a fundamental type to create the object f2