c++ - C++泛型类,单独实现?
问题描述
我正在寻找template <Class T>
在 C++11 中编写一个通用类(像这样:),但有人告诉我实现只能写在.h
文件中,这是为什么呢?
我写了一些代码(1000 行),完全是一团糟,我不知道有些代码去了哪里。有没有办法将实现和声明分开?
解决方案
嗯,没有*。
要使用任何一段代码,翻译单元需要自行编译或访问编译后的版本。无法编译模板类的所有可能版本,因此需要完整定义才能使用它。
.* 从技术上讲,如果您的类模板仅用于几种类型,那么您可以将实现隐藏在 .cpp 中,并在同一个 .cpp 中构建所有必需的版本,但它并不是真正通用的。
如果您对杂乱的实现不满意,您可以希望在非泛型函数中实现杂乱的部分并将其隐藏在 .cpp 中。或者,就像在许多仅包含头文件的库中一样,制作命名空间details
或其他东西并在那里推送所有“实现”细节。
推荐阅读
- python - 如何过滤输出结果并设置范围?
- java - 将 SQL Server 从 2012 迁移到 2016 时出现 SQLServerException
- python - Flask 分页,修改 request.args 或 request.form 参数并传递修改后的值以创建新的 URL
- javascript - 电子需求未定义
- anaconda - RuntimeError:CUDA 错误:没有可在设备上执行的内核映像
- python - python3 setup.py 安装失败(RHEL 8)
- excel - 在Excel VBA中双击执行宏
- javascript - 如何导入 ReactBootstrap 以在 react.js 中使用按钮
- java - 如何使用java检查aerospike数据库中是否存在bin?
- reactjs - React:图像源无效道具(源使用带有图像地址的字符串)