定义模板时,格式为:
template <class T> returnType templateName{...};
我的问题是:上面模板声明中的class
关键字会使数据类型T成为类吗?问题说明如下:
<class T>
内的中,T应该是数据类型的名称,并以“ class”开头。在cpp中学习课程时,我知道定义了一个课程:class ClassName{...};
。因此,我的理解是,所有带有class关键字的内容都将是一个类的名称。对于模板声明,在class
之前还有一个T
关键字。这是否意味着CPP中的数据类型也是类?
答案 0 :(得分:4)
在<class T>
内的内,
T
应该是数据类型的名称,并以“ class”开头。这是否意味着CPP中的数据类型也是类?
答案是“否”。
在定义模板时,无论是类模板还是功能模板,都可以使用typename
以及class
。 typename
是更准确的描述,但也支持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