我可以转换每个C++;是否将lib转换为仅页眉库? 在C++中,库只能以头文件的形式分发。我想知道是否有可能将每个库都转换为只包含标题的库?反之亦然? 应该使用什么标准来决定是否只在标题下分发库?除了必须重新编译仅标头库之外,还有其他可能影响决策的考虑事项吗?“内联”如何在仅标题库中扮演导入角色

我可以转换每个C++;是否将lib转换为仅页眉库? 在C++中,库只能以头文件的形式分发。我想知道是否有可能将每个库都转换为只包含标题的库?反之亦然? 应该使用什么标准来决定是否只在标题下分发库?除了必须重新编译仅标头库之外,还有其他可能影响决策的考虑事项吗?“内联”如何在仅标题库中扮演导入角色,c++,header-files,C++,Header Files,谢谢,简言之,如果您对所有源代码都很满意,那么可以 但是还有很多其他的事情。例如,如果发布了对库的更新,则动态链接库将使用最新版本,但只需重新编译头。另外,另一个很大的区别是代码优化。当编译器可以访问源代码时,它可以针对特定情况生成更好的程序集 最后,但并非最不重要的一点是,使用动态链接,您必须将其安装在库目录中,但只有使用头,您的程序才能独立 通常,头中的任何内容都被认为是内联的。这对某些库是有利的,但一般来说,使用时应慎重考虑。在头中放置太多的逻辑可能会导致一些不良后果:客户机代码的相互依赖

谢谢,

简言之,如果您对所有源代码都很满意,那么可以

但是还有很多其他的事情。例如,如果发布了对库的更新,则动态链接库将使用最新版本,但只需重新编译头。另外,另一个很大的区别是代码优化。当编译器可以访问源代码时,它可以针对特定情况生成更好的程序集


最后,但并非最不重要的一点是,使用动态链接,您必须将其安装在库目录中,但只有使用头,您的程序才能独立

通常,头中的任何内容都被认为是内联的。这对某些库是有利的,但一般来说,使用时应慎重考虑。在头中放置太多的逻辑可能会导致一些不良后果:客户机代码的相互依赖、逻辑发生更改时编译时间过长、内联的过度使用导致代码膨胀等。其中一些问题可以通过一个好的优化编译器来缓解。一般来说,我建议不要将复杂的逻辑放在内联函数中,也不要放在头文件中,因为这是导致这些问题的主要原因

相反,是的,大多数作为头文件分发的库可以转换为更传统的库。例外情况是严重依赖模板化代码的库,因为这通常是在编译时解释的


关于标准,我想说的是,如果代码被大量模板化和/或主要由简单函数组成,那么头库将是一个可接受的选择。否则,普通库几乎肯定是更好的选择。

这取决于库是否可能仅将其转换为标题。相反,任何库都只能从header转换为传统的header+源。你真的想问自己,为什么你只想要标题?你希望获得或实现什么

当涉及到库更改时,仅将库作为标题分发可能会导致问题。假设有一个小的改变,它不会修改界面。每个使用库的应用程序都必须重新编译,而不是重新编译库。使用静态库,用户应用程序只需重新链接即可。使用共享库,它们不必重新编译或重新链接

您还可能遇到这样的问题:使用库的每个组件都必须使用相同的编译器和链接器版本,并且必须以类似方式构建(即,相同的CRT链接、优化等),以便彼此之间与库对象通信。但这在很大程度上可以通过某些设计选择来解决


关于“内联”,所有内容本质上都是与仅页眉库内联的。

内部链接似乎无法仅在页眉中工作。即使是臭名昭著的页眉繁重的BOOST库也会对不依赖模板的不可内联部分使用链接对象,因此我同意他们的方法。优化器不能依靠对大型函数的调用站点来实现如此大的魔力,而这些函数无论如何都不是模板化的……还有一个事实,即并非所有的库都可以是头函数。也就是说,那些拥有全局权限的库使用其他库。将所有代码内联在一起会对客户机产生一个繁重的要求,要求客户机导入这些lib。