D
可轻松与C
接口。
D
与C++
的接口很容易,但是(并且它很大但是C++
需要非常简单。代码无法使用:
我完全理解继承限制。然而,其余的,感觉像人为限制。现在我不希望能够直接使用std::vector<T>
,但我真的希望能够将std::vector<int>
作为外部模板进行链接。
C++ interfacing page有这个特别令人沮丧的评论。
D模板几乎没有共同之处 C ++模板,这是不太可能的 任何合理的方法 可以发现它表达C ++ 模板以链接兼容的方式 与D。
这意味着C ++ STL和C ++ 提升,可能永远无法访问 来自D.
不可否认,我在std::vector
编码时可能永远不需要D
,但我很乐意使用QT或boost。
那是什么交易。为什么在D中表达非平凡的C++
类很难?是否值得添加一些特殊注释或至少表达名称空间的东西?
更新: “D在作品中有名称空间支持”来自Walter Bright。
答案 0 :(得分:27)
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容器链接的需要,即使对于无法负担垃圾收集的紧密应用也是如此。
答案 1 :(得分:17)
正如Hans Passant在评论中提到的那样,在不同的C ++编译器中甚至不支持D和C ++之间所需的互操作性。有一个C ++ ABI(应用程序二进制接口)标准似乎有一些支持,但我不确定究竟有多广泛(英特尔,GCC和ARM编译器似乎遵循ABI)。我没有必要使用它,我不确定微软是否坚持使用它的x86或x64编译器(我想它可能适用于ia64,因为这是ABI标准的开始)。
有关C ++ ABI的一些详细信息,请参阅"Interoperability & C++ Compilers" by Joe Goodman。
也许Walter Bright可以说服支持与符合ABI标准的C ++库/对象的D互操作性(虽然我不确定他可能优先考虑它的位置)。
答案 2 :(得分:2)
为了好玩,我一直在使用一些C ++代码。
这可能不会回答你的问题,但我认为你(以及D社区中的一些人)可能对我当时做的一些笔记感兴趣。这就是:TechNotes。