【问题标题】:C++ generic class, separate implementation? [duplicate]C++泛型类,单独实现? [复制]
【发布时间】:2020-06-13 18:58:55
【问题描述】:

我希望在 C++11 中编写一个泛型类(例如:template <Class T>),但有人告诉我实现只能写在 .h 文件中,这是为什么呢?

我写了一些代码(1000 行),完全是一团糟,我不知道有些代码去了哪里。有没有办法将实现和声明分开?

【问题讨论】:

标签: c++ class generics methods


【解决方案1】:

嗯,不*。

要使用任何一段代码,翻译单元需要自行编译或访问编译后的版本。无法编译模板类的所有可能版本,因此需要完整的定义才能使用它。

.* 从技术上讲,如果您的类模板仅用于几种类型,那么您可以将实现隐藏在 .cpp 中,并在同一个 .cpp 中构建所有必需的版本,但它不会是真正的通用。

如果您对杂乱的实现不满意,您可以希望在非泛型函数中实现杂乱的部分并将其隐藏在 .cpp 中。或者,就像在许多只包含头文件的库中一样,创建命名空间details 或其他东西,然后将所有“实现”细节推送到那里。

【讨论】:

  • 关于“细节”如何有助于使事情更有条理?
  • @smith 通常在开源库中 details 暗示“不要使用它,因为我们可能会随时更改它”。对于您自己的项目,您可以在details 中隐藏各种有助于您实现模板的东西,同时您向其他人发出信号,表明他们不应该被命名空间打扰。例如,您可以在 details 和外部创建三个完全不同的模板类,专用于不同的模板参数,并提供一个别名,根据模板参数在类模板之间改变。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-11
相关资源
最近更新 更多