gpt4 book ai didi

c++ - 为什么我应该在 c++ 而不是 c 中设置插件接口(interface)

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:17:49 25 4
gpt4 key购买 nike

由于我的 previous questions我问自己:为插件系统设置 C++ 接口(interface)是否有用?以下几点反对它:

  • 不同编译器及其版本之间没有共同的 ABI,内存中的对象没有共同的布局
  • 没有直接类导出。您必须导出工厂和析构函数。如果你的对象被其他对象持有,问题就会出现 delete它们,例如智能指针。
  • STL 的不同实现,你不能传递 std::list<T>到插件
  • 使用不同版本的库,例如 Boost

如果您将自己限制在 C++ 语言的其余部分,您几乎会以“C 子集”告终。使用 C++ 有什么要点吗? Qt-Toolkit是如何解决上述问题的?

备注:我主要指的是 Linux 系统。不过,我对其他平台上的解决方案很感兴趣。

附加问题:使用 C 接口(interface)有什么问题? struct的内存布局秒?应避免使用 C 的哪些语言部分?

最佳答案

虽然这更多是关于“如何”而不是“为什么”,但您可能对 (not yet)Boost.Extension 感兴趣图书馆,以及author's blog关于这个话题。

对于“为什么”部分,我的 2(加拿大)美分:这取决于受众(插件作者)以及应用程序与其插件之间接口(interface)的丰富程度:

  • 如果受众众多或异类,C++ 插件系统的局限性(使插件端和应用程序端在编译器和库版本方面保持同步)变得不切实际,而 C 接口(interface)更易于维护。如果受众人数少、同质化或在您的控制之下,这些问题就不那么重要了。
  • 如果接口(interface)是丰富的(对“丰富”的确切含义挥手),C 接口(interface)可能会变得难以编写,天平向 C++ 倾斜。

然而,第一个标准(观众)更为重要,因此只有当观众是同质的并且界面从表现力 yield 中显着受益时,C++ 界面才有意义。

关于c++ - 为什么我应该在 c++ 而不是 c 中设置插件接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1233040/

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