首页 > 解决方案 > C++泛型类,单独实现?

问题描述

我正在寻找template <Class T>在 C++11 中编写一个通用类(像这样:),但有人告诉我实现只能写在.h文件中,这是为什么呢?

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

标签: c++classgenericsmethods

解决方案


嗯,没有*。

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

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

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


推荐阅读