C++库:.hpp+.inl(单独的定义和声明)与仅.hpp(在类主体代码中)



我正在重写我的Windows C++Native Library(自2002年以来一直在努力),并考虑到公开发布。在过去的10年里,我一直是这150多个KLOC的唯一受益者,我觉得其他人可能也会找到它的好用途。

目前,整个库都是模板化的,只包含头这意味着所有代码都在类的主体中。这不是很容易管理,但它是可以的。

在阅读了几篇C++库编码指南后,我很想把它分解成.hpp+.inl文件对一些类进行了实验,它确实提高了可读性,使其他类更容易处理。我知道任何时候一切都在哪里。但其他用户可能希望快速了解类声明。。。并且定义仅在必要时(调试)

问题
从类模板的类定义中分离成员定义的利弊是什么?有公认的做法吗

这对我来说很重要,因为这是一条单行道。我以后不能用其他方式重构它,所以任何反馈都很重要。。。

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

问题:我什么时候应该考虑只制作库头-答案在这里^。

答案是,我将把它分解为.cpp.hpp文件,并使其准备好编译为仅头文件和静态库或DLL

@Steve Jessop

如果您认为您的非模板库只能是头,请考虑将其分为两个文件,然后提供第三个文件,其中包括.h.cpp(带有include guard)

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

^这是个很棒的主意这需要更多的工作,但它的用途非常广泛

更新

显式实例化.cpp文件中的模板类是非常重要的。

最新更新