gpt4 book ai didi

c++ - C++中一些模块的API

转载 作者:行者123 更新时间:2023-11-30 04:28:48 24 4
gpt4 key购买 nike

我有一组 C++ 库,现在我想为这个 dll 提供一个通用的 API 接口(interface)!

想法是使用外观设计模式;但不能将其应用于 dll,只能应用于对象/类!我认为有必要将所有代码与此设计合并到一个库(单个项目)中,不是吗?

有什么想法吗?!

非常感谢!

问候

最佳答案

背景:

  • 您拥有跨多个 DLL 的大型 C++ 库。
  • 您的库导出 C++ 对象,而不是 C 函数(因此它不能跨不同编译器进行二进制移植)。
  • 你想提供一个简单的界面来提供对这个库的访问,你将使用facade pattern实现这一目标。

您不需要将所有内容打包到一个 DLL 中。此模式的目的之一是简化依赖关系。它的客户端只能依赖于该 DLL(但如果需要,您的接口(interface)可以跨越多个 DLL)。例如:

  • Base64.dll:它包含用 base64 编码/解码文本的 C 函数。
  • Network.dll:它包含用于管理网络连接的 C++ 对象。
  • RegEx.dll:它包含用于解析 RegEx 的 C++ 对象。
  • MailHelpers.dll:它包含用于发送/接收原始电子邮件的 C++ 对象。

现在你想为这个任务提供一个简单漂亮的界面。一个对象代表一条消息,另一个对象代表连接等等。您将创建另一个依赖于 Base64.dll、Network.dll、RegEx.dll、MailHelpers.dll 的 DLL(例如 Smtp.dll),它会公开一个通用的高级 C++ 接口(interface)。它的客户将向这个 DLL 添加一个依赖项,他们不会知道任何关于其他人的信息。

所以,最后,答案是,您不需要将所有代码(您想要用外观隐藏的代码)合并到一个库中。

第二种情况:您的门面库将变得更加复杂。您想要将所有 高级 任务从 Smtp.dll 剥离到另一个库,并且您计划创建一个帮助程序库以使常见任务变得非常简单。你会得到这样的东西:

  • SmtpCore.dll:一个简单、统一的 SMTP 客户端接口(interface)。
  • SmtpTasks.dll:一个帮助程序库,其中包含用于执行常见任务的简单方法。它依赖于 SmtpCore.dll,它的客户端将只有这种依赖性(例如)。
  • Mail.dll:功能齐全的库。它添加类以使用各种协议(protocol)接收邮件。它依赖于 SmtpCore.dll 和其他 DLL。它的客户端将依赖于 Mail.dll 和 SmtpCore.dll。

第二个答案再次是,您再次使用外观模式并且您的外观跨多个 DLL。

关于c++ - C++中一些模块的API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9831360/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com