加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 创建具有多个类的库的推荐方法是什么?

发布时间:2020-12-16 10:21:05 所属栏目:百科 来源:网络整理
导读:我是C的新手(之前的 Python经验,涉及Java),我正在编写一个小程序作为熟悉项目.作为程序的一部分,我正在编写一个类来解码一些数据,并最终编写一个类似的将执行编码的类.代码是我确信我会经常重用的东西,并认为创建一个库作为项目的一部分会很有趣. 我的问题是
我是C的新手(之前的 Python经验,涉及Java),我正在编写一个小程序作为熟悉项目.作为程序的一部分,我正在编写一个类来解码一些数据,并最终编写一个类似的将执行编码的类.代码是我确信我会经常重用的东西,并认为创建一个库作为项目的一部分会很有趣.
我的问题是,什么被认为是创建图书馆的最佳做法?

编辑:(修订)

在提出这个问题之后,我意识到我不知道我不知道的是什么.我做了一些更多的研究,这应该有助于使我的问题更具体:

>我在Qt Creator中开发.因此,与Qt相关的细节会有所帮助,但不是必需的.
>我在Qt(MyCodec)中创建了一个新的静态库项目,目前,该项目定义了一个名为MyDecoder的类.
>作为一个库,我的假设是,要添加MyEncoder,我只需创建另一个类/头文件.
>接下来发生的事情是我不确定的地方.我只是建立图书馆吗?我的理解是它将创建(在Windows中).lib和.h文件.在这一步之前我应该??做些什么吗?是否存在会影响我与之互动方式的选项?
>我是否只在程序中包含该头文件以访问我编写的两个类?
>我在Qt中为项目添加.lib文件时找到了很多答案,因此我不需要这些信息.

原始问题:(上下文)

我最初的想法是创建包含MyEncoder和MyDecoder类的MyLib是最方便的.

>如果我这样做,我只是在标题中声明这两个类吗?
>我想从这个库中创建一个DLL,以实现可移植性和体验.我确信有很多关于创建和使用DLL的信息(这不是这个问题的主题),但是如果有一个特别好的教程(对于Qt)请传递它.
>我的假设是,最好为MyEncoder和MyDecoder使用单独的命名空间来实现此实现,而不是MyLib的一个命名空间?

我可以看到这种方法的一个折衷是应用程序的大小,因为包括MyLib.h将包括编码器和解码器的代码(如果编码器和解码器是单独的应用程序).这是假设我没有使用DLL.

我想我得到的是:

>有哪些方法(推荐)?
>每个人的权衡是什么?
>我在哪里可以找到关于这个特定主题的文档(教程/示例)?我的搜索努力没有取得多大成果.

如果它更具体,我在Qt Creator中使用Qt 4.7.4进行开发.

解决方法

C中关于图书馆的一个“最佳实践”通常是“你付出的代价”.

这适用于您的问题是您将MyEncoder和MyDecoder放在单独的头文件中.因此,如果用户想要使用MyEncoder,他将包含MyEncoder.h,如果他想使用MyDecoder,他将包含MyDecoder.h,如果他想使用两者,他将包括两个头.

链接器通常只包含您在可执行文件中使用的代码部分,因此就代码大小而言,没有任何代价,但编译时间会受到惩罚,特别是如果您在类中开始使用高级模板技术.在大型项目中编译时间可能会很长,因此只能包含您要使用的内容非常重要.

当然,有时候用一个标题包含所有内容也很方便.所以你可以拥有的是:

> MyEncoder.h
> MyDecoder.h
> MyCodec.h

然后MyCodec.h可以包含MyEncoder.h和MyDecoder.h

假设它们是针对相同类型的数据进行操作,可能没有充分的理由将MyEncoder和MyDecoder放在不同的命名空间中.

您可能希望拥有类似MyCodec命名空间的东西,并在该命名空间中声明MyEncoder和MyDecoder.

更新了您的修订版:

As a library,my assumption is that,to add MyEncoder,I just create
another class/header file.

这是一个正确的假设.

What happens next is where I am uncertain. Do I just build the
library? My understanding is that it will create (in Windows) a .lib
and a .h file. Is there something I should do before this step? Are
there options that will affect the way I interact with it?

我有一段时间没有使用过Qt创建者,所以我不能在权限上说话或者如何访问相关选项.但作为一般规则,您将需要至少有两个版本的库;调试版本和发布版本.如果您的库使用Qt库,那么当应用程序链接到库的调试版本时,他们需要在其路径中具有Qt共享库的调试版本,如果它们链接到您的发行版本,则需要拥有Qt库的发布版本.

您可能还有一些选项可以静态链接到C标准运行时库,还是动态链接到DLL.

但基本上是的,您只需构建库,然后使用它的应用程序将库链接到可执行文件.

Do I just include that header file in my program to access both
classes that I wrote?

您包含头文件,并链接到.lib文件.这就是你应该做的一切.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读