c++ - C++ 中的对象实例化类型
问题描述
有人可以告诉我为什么我们在下面的行后面size_t
写吗?Graph
Graph<std::size_t> g;
Graph
是一个类名并且g
是一个对象。在那里做什么size_t
?我们为什么要这样写?
如果问题太基本,我很抱歉。但是到目前为止,当我想创建一个我写的类对象时,我找不到解释:
class_name object;
喜欢:
Graph g;
解决方案
因为Graph
是类模板而不是普通类。
类模板定义了一个类,其中一些变量的类型、方法的返回类型和/或方法的参数被指定为参数。
因此,通过使用Graph<std::size_t > g;
您正在使用具有size_t
作为类型参数的类模板实例之一。
你也可以使用Graph<int > g
等等。
增加项:
当编译器遇到模板方法定义时,它只执行语法检查,但实际上并不编译模板。
让我们编写模板
template<typename T>
class MyClass
{
T memberVar{};
};
只有当编译器遇到模板的实例化时,例如,它才会通过将类模板定义中的每个替换为等MyClass<int> myObj
来编写模板int
版本的代码。MYClass
T
int
推荐阅读
- avfoundation - 在 iOS 应用程序中更新下载的 HLS 文件的最佳方法是什么?
- graphql - Gatsby / GraphQL 应用程序 - 部署时的渲染和样式问题(Netlify 和 Surge)
- coc.nvim - CoC:诊断窗口接管屏幕
- c - 最小脚本 Dev-C++ 上的“未定义对‘WinMain’的引用”错误
- reactjs - 如何使用 AWS coginto auth sdk 刷新令牌
- git - Git回滚合并提交
- python - 我如何确保不同的最终用户在 PythonAnywhere 中同时访问我的程序时将他们的文件/程序状态保留给自己
- javascript - 在 for 循环 VueJS 中同步 API 调用
- reactjs - 协助 React useState hook 暂时为空/空数据
- java - 转换 2 个相同对象后抛出 Java ClassCastException