C ++库:.hpp + .inl(单独的定义和声明)vs .hpp only(类内体代码)

时间:2013-08-05 18:17:44

标签: c++11 coding-style libraries

重写我的Windows C ++原生图书馆 (自2002年以来一直在努力),考虑到公开发布。在过去的10年里,我一直是150+ KLOC的唯一受益者,我觉得其他人也可能会有很好的用途。

目前整个库都非常模板化,只有标题。这意味着所有代码都在类的主体中。管理起来并不容易,但没关系。

在阅读了几个C ++库编码指南后,我非常想要将其分解为.hpp + .inl个文件。实验性地完成了几个类的编写确实提高了可读性并使其他人更容易处理。我知道在任何时候一切都在哪里。但是其他用户可能希望快速概述类声明...以及仅在必要时定义(调试)

问题
从类模板的类定义中拆分成员定义的优缺点是什么?是否有普遍接受的做法。

  

这对我很重要,因为这是一条单行道。我无法在以后的其他方面重构它,所以任何反馈都很重要 ......

1 个答案:

答案 0 :(得分:0)

我在另一个问题上找到了答案。

问题: When should I consider making a library header-only? - 和answer is here^

答案是我将其分解为.cpp.hpp文件,并准备将其编译为仅标题和静态库或DLL。

  

@Steve Jessop

     

如果您认为非模板库可能只是标题库,请考虑将其分为两个文件,然后提供包含 .h .cpp的第三个文件 (带有包含警卫)

     

然后,任何在很多不同的TU中使用你的库,并怀疑这可能花费大量编译时间的人都可以轻松地进行更改以测试它。

^ 这是一个很棒的主意。 它需要更多的工作,但它是多功能的。

<强>更新

explicitly instantiate^ .cpp文件中的模板化类非常重要。