首页 > 解决方案 > C++ 中的对象实例化类型

问题描述

有人可以告诉我为什么我们在下面的行后面size_t写吗?Graph

Graph<std::size_t> g;

Graph是一个类名并且g是一个对象。在那里做什么size_t?我们为什么要这样写?

如果问题太基本,我很抱歉。但是到目前为止,当我想创建一个我写的类对象时,我找不到解释:

class_name object;

喜欢:

Graph g;

标签: c++

解决方案


因为Graph是类模板而不是普通类。

类模板定义了一个类,其中一些变量的类型、方法的返回类型和/或方法的参数被指定为参数。

因此,通过使用Graph<std::size_t > g;您正在使用具有size_t作为类型参数的类模板实例之一。

你也可以使用Graph<int > g等等。

增加项:

当编译器遇到模板方法定义时,它只执行语法检查,但实际上并不编译模板。

让我们编写模板

template<typename T>
class MyClass
{
    T memberVar{};
};

只有当编译器遇到模板的实例化时,例如,它才会通过将类模板定义中的每个替换为等MyClass<int> myObj来编写模板int版本的代码。MYClassTint


推荐阅读