【发布时间】:2016-05-05 03:31:42
【问题描述】:
我正在开发一个大量使用模板的 C++ 库。对于大多数类,所有代码都驻留在某个.hpp 文件中,该文件将由客户端代码直接为#included。我担心两件事:
是否有一些设计模式可以将实现代码移至“后台”?当我设计非模板类时,我经常将“接口”类和实现类分开,前者会通过
getImpl()->foo()之类的方式委托给后者,从而实现代码可以动态链接。我不确定如何为模板执行此操作。 我认为动态链接可能对模板没有意义?大模板标题(> 1000 行)是否常见?或者这很糟糕?如果它不好,我该怎么办?
我知道这个问题How to reduce output size of template-heavy C++ code?,但我认为我们在问不同的事情:该问题的 OP 正在尝试减小 输出 的大小,而我正在尝试减小我的库头本身的大小。
更新:例如,如果您要设计std::vector,您将如何组织其接口和实现(如果需要)?
【问题讨论】:
-
缩小尺寸到底是什么意思?为了避免因应用的模板参数种类过多而导致代码实例膨胀?
-
@πάνταῥεῖ 我主要指的是代码行数。向客户端公开千行标题对我来说是个坏主意(至少对于非模板代码而言)。
-
如果您有不依赖于模板参数的非模板代码,请将其移出到单独的编译单元。
-
@πάνταῥεῖ 如果我的库代码是纯模板的,我假设您所说的仅适用于非模板 client 代码?
-
“我假设你所说的仅适用于非模板客户端代码?”当然。