我对 C++ 比较陌生(以前有 Python 经验并涉足 Java),我正在编写一个小程序作为熟悉项目。作为程序的一部分,我正在编写一个类来解码一些数据,最终将编写一个类似的类来执行编码。代码是我确信我会经常重用的东西,并认为创建一个库作为项目的一部分会很有趣。
我的问题是,什么被认为是创建库的最佳实践?
编辑:(修订)
问了这个问题后,我意识到我不知道我不知道什么。我做了更多的研究,这应该有助于使我的问题更具体:
原始问题:(上下文)
我最初的想法是创建包含 MyEncoder 和 MyDecoder 类的 MyLib 将是最方便的。
我可以看到这种方法的一个折衷是应用程序的大小,因为包含 MyLib.h 将包含编码器和解码器的代码(如果编码器和解码器是单独的应用程序)。这是假设我没有使用 DLL。
我想我得到的是:
如果它有助于更具体,我正在使用 Qt Creator 中的 Qt 4.7.4 进行开发。
最佳答案
C++ 中关于库的一种“最佳实践”通常是“您为所使用的东西付费”。
这如何适用于您的问题是您将 MyEncoder 和 MyDecoder 放在单独的头文件中。因此,如果用户想使用 MyEncoder,他将包含 MyEncoder.h,如果他想使用 MyDecoder,他将包含 MyDecoder.h,如果他想同时使用两者,他将包含两个 header 。
链接器通常只包含您在可执行文件中使用的代码部分,因此就代码大小而言没有损失,但编译时间有损失,特别是如果您开始在类中使用高级模板技术.在大型项目中,编译时间可能会很长,因此能够只包含您将要使用的内容非常重要。
当然,有时用一个标题包含所有内容也很方便。所以你可以拥有的是:
然后 MyCodec.h 可以同时包含 MyEncoder.h 和 MyDecoder.h
假设 MyEncoder 和 MyDecoder 旨在对相同类型的数据进行操作,可能没有充分的理由将 MyEncoder 和 MyDecoder 放在不同的命名空间中。
您可能想要类似 MyCodec 命名空间的东西,并在该命名空间中声明 MyEncoder 和 MyDecoder。
针对您的修订版进行了更新:
这是一个正确的假设。
我有一段时间没有使用 Qt creator,所以我无法权威地谈论它或如何访问相关选项。但作为一般规则,您至少需要 2 个版本的库;一个调试版本和一个发布版本。如果您的库使用 Qt 库,那么当应用程序链接到您库的调试版本时,它们将需要在其路径中包含 Qt 共享库的调试版本,如果它们链接到您的发布版本,则需要有 Qt 库的发行版。
还可以选择是静态链接到 C++ 标准运行时库,还是动态链接到 DLL。
但基本上是的,您只需构建库,然后使用它的应用程序会将库链接到可执行文件。
您包括头文件,并链接到 .lib 文件。这就是你应该做的。
关于c++ - 创建具有多个类的库的推荐方法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8883410/