【发布时间】:2019-04-29 16:09:02
【问题描述】:
我想学D,但是我没有很好地理解一个重要的东西。 目前 C++ 和 D 之间的互操作性状态如何?
我确信不可能链接到 C++ 编译的二进制文件,因为它甚至不适用于 C++ 编译器。但是如果我有一个 C++ 库的源代码和一些 D 源代码呢?有没有可能让他们说话? (希望以一种有效的方式)。
不同的 C++ 版本(C++98、11、14、17 和未来版本)怎么样?
【问题讨论】:
-
多年前我最后一次做一些 C++ 和 D 互操作时,我使用 C ABI 来连接两者。 Interfacing to C++ 文档似乎有一些(有限的?)改进。
-
Thwy 都可以与 C 互操作。这是你的(有限)桥。
-
用例是什么?有一些部分用 D 编写的 C++ 程序?需要使用一些用 C++ 编写的代码的 D 程序?为了好玩而实验?将程序从 C++ 增量移植到 D(反之亦然)?如果用例是“我想学习 D”,我会说:只要学习 D,不要在混合中添加 C++,这只会让你学习 D 的经历变得痛苦。
-
是的,C ABI 也适用于二进制文件。 @Eljay 目前只是一个实验,但如果实验有效,我可能想使用现有的 C++ 库,尤其是一些使用模板的库
-
实际上,D 可以在某种程度上与 C++ 二进制文件互操作。它通过复制给定平台上最流行的编译器的约定来做到这一点。所以它本身并不是一个标准,但在很多情况下它确实有效。您可以直接访问一些 C++ 类。但细节在“一些”中 - 特别是,模板仅在它们已经在 C++ 二进制库中实例化时才有效(D 无法读取 C++ 源代码),并且 C++ 类可能需要用 C++ 编写的工厂函数。文档有点差,因为这改变了很多......
标签: c++ programming-languages d abi language-interoperability