c – 创建具有多个类的库的推荐方法是什么?
我是C的新手(之前的
Python经验,涉及Java),我正在编写一个小程序作为熟悉项目.作为程序的一部分,我正在编写一个类来解码一些数据,并最终编写一个类似的将执行编码的类.代码是我确信我会经常重用的东西,并认为创建一个库作为项目的一部分会很有趣.
我的问题是,什么被认为是创建图书馆的最佳做法? 编辑:(修订) 在提出这个问题之后,我意识到我不知道我不知道的是什么.我做了一些更多的研究,这应该有助于使我的问题更具体: >我在Qt Creator中开发.因此,与Qt相关的细节会有所帮助,但不是必需的. 原始问题:(上下文) 我最初的想法是创建包含MyEncoder和MyDecoder类的MyLib是最方便的. >如果我这样做,我只是在标题中声明这两个类吗? 我可以看到这种方法的一个折衷是应用程序的大小,因为包括MyLib.h将包括编码器和解码器的代码(如果编码器和解码器是单独的应用程序).这是假设我没有使用DLL. 我想我得到的是: >有哪些方法(推荐)? 如果它更具体,我在Qt Creator中使用Qt 4.7.4进行开发. 解决方法
C中关于图书馆的一个“最佳实践”通常是“你付出的代价”.
这适用于您的问题是您将MyEncoder和MyDecoder放在单独的头文件中.因此,如果用户想要使用MyEncoder,他将包含MyEncoder.h,如果他想使用MyDecoder,他将包含MyDecoder.h,如果他想使用两者,他将包括两个头. 链接器通常只包含您在可执行文件中使用的代码部分,因此就代码大小而言,没有任何代价,但编译时间会受到惩罚,特别是如果您在类中开始使用高级模板技术.在大型项目中编译时间可能会很长,因此只能包含您要使用的内容非常重要. 当然,有时候用一个标题包含所有内容也很方便.所以你可以拥有的是: > MyEncoder.h 然后MyCodec.h可以包含MyEncoder.h和MyDecoder.h 假设它们是针对相同类型的数据进行操作,可能没有充分的理由将MyEncoder和MyDecoder放在不同的命名空间中. 您可能希望拥有类似MyCodec命名空间的东西,并在该命名空间中声明MyEncoder和MyDecoder. 更新了您的修订版:
这是一个正确的假设.
我有一段时间没有使用过Qt创建者,所以我不能在权限上说话或者如何访问相关选项.但作为一般规则,您将需要至少有两个版本的库;调试版本和发布版本.如果您的库使用Qt库,那么当应用程序链接到库的调试版本时,他们需要在其路径中具有Qt共享库的调试版本,如果它们链接到您的发行版本,则需要拥有Qt库的发布版本. 您可能还有一些选项可以静态链接到C标准运行时库,还是动态链接到DLL. 但基本上是的,您只需构建库,然后使用它的应用程序将库链接到可执行文件.
您包含头文件,并链接到.lib文件.这就是你应该做的一切. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |