【问题标题】:Link compatibility between C++ and DC++ 和 D 之间的链接兼容性
【发布时间】:2011-03-02 17:38:21
【问题描述】:

DC 轻松交互。

DC++ 的接口一样容易,但是(而且它很大)C++ 需要非常微不足道。代码不能使用:

  • 命名空间
  • 模板
  • 多重继承
  • 混合使用虚拟和非虚拟方法
  • 更多?

我完全理解继承限制。然而,其余的感觉像是人为的限制。现在我不想直接使用std::vector<T>,但我真的希望能够与std::vector<int>作为外部模板链接。

C++ interfacing page 有这个特别令人沮丧的评论。

D 模板与 C++ 模板,而且不太可能 任何一种合理的方法 可以找到表达C++ 以链接兼容的方式模板 与 D.

这意味着 C++ STL 和 C++ 提升,可能永远无法访问 来自D。

诚然,在D 中编码时我可能永远不需要std::vector,但我喜欢使用QTboost

那么有什么关系。为什么在 D 中表达非平凡的C++ 类如此困难?添加一些特殊的注释或至少表达命名空间的东西不值得吗?


更新: 来自Walter Bright 的“D 在工作中支持命名空间”。

【问题讨论】:

  • 它甚至不受任何主流 C++ 编译器的支持。您为什么希望其他语言支持它?
  • @Hans,是什么意思?
  • 我认为他的意思是 {mainstream C++ compilers}\X 甚至不支持“链接到编译器 X 生成的 C++”。
  • 我的意思是模板,令人沮丧的评论。可导出模板已从 C++0x 标准中删除。在爱迪生的支持下,唯一成功的人。 @Feep 也是对的。
  • @Hans,我不希望导出的模板只是 externed 模板。一个外部模板已经被实例化了,所以我无法更改模板在D 中使用的类型。

标签: c++ templates d


【解决方案1】:

FWIW Qt 有一个积极开发的 D 绑定:http://www.dsource.org/projects/qtd

我认为 boost 中的许多组件都与 C++ 高度相关,无法有意义地移植到其他语言。

使用例如如果您花时间编写转发给适当成员函数的常规(例如命名空间级别)函数,则 std::vector 是可能的。乏味,但负担得起(对于更高级别的组件;可能不适用于 std::vector)。

另外,我最近在标准库中检查了一个密封数组和密封二进制堆实现,它使用引用计数、malloc/free 和确定性销毁而不是垃圾收集(请参阅http://www.dsource.org/projects/phobos/browser/trunk/phobos/std/container.d)。其他容器将紧随其后。这些容器使用三种特定技术(在我即将发表的文章“密封容器”中进行了描述)在不影响程序安全性的情况下实现确定性销毁。

希望密封的容器将避免与 STL 容器链接的任何需要,即使对于无法承受垃圾收集的紧凑型应用程序也是如此。

【讨论】:

  • 对 STL 知之甚少,但对 Boost 了解不多,我敢断言,在 D 中几乎没有什么不能做得更好或更好。也就是说,能够使用它们将允许与更高级别的 C++ 代码更好地交互。
  • 我特别想要的 boost 库是 Boost.Asio。我不知道有类似的跨平台网络库。我确信我可以找到其他人。此外,并不是不能用 D 编写类似的库,而是它已经被编写、测试过,并已在许多不同的项目中使用。
【解决方案2】:

正如 Hans Passant 在评论中提到的那样,不同的 C++ 编译器甚至不支持您想要的 D 和 C++ 之间的互操作性级别。有一个 C++ ABI(应用程序二进制接口)标准似乎有一些支持,但我不确定到底有多广泛(英特尔、GCC 和 ARM 编译器似乎遵循 ABI)。我不需要使用它,而且我不确定微软是否在他们的 x86 或 x64 编译器中遵守它(我想它可能适用于 ia64,因为那是 ABI 标准的起点)。

有关 C++ ABI 的一些详细信息,请参阅 "Interoperability & C++ Compilers" by Joe Goodman

也许可以说服 Walter Bright 支持 D 与遵循 ABI 标准的 C++ 库/对象的互操作性(尽管我不确定他可能会优先考虑它)。

【讨论】:

    【解决方案3】:

    只是为了好玩,我一直在连接一些 C++ 代码。

    这可能无法回答您的问题,但我认为您(以及 D 社区中的一些人)可能会对我当时所做的一些笔记感兴趣。在这里:TechNotes

    【讨论】:

    • 加 1 用于故障模式文档
    猜你喜欢
    • 1970-01-01
    • 2015-11-18
    • 1970-01-01
    • 1970-01-01
    • 2017-03-27
    • 2019-12-27
    • 2021-12-27
    • 1970-01-01
    相关资源
    最近更新 更多