C++和D之间的链接兼容性

def*_*ode 20 c++ templates d

D容易接口C.

D同样容易接口C++,但(并且它很大但是)C++需要非常微不足道.代码不能使用:

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

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

C++接口页有这个特别令人沮丧的评论.

D模板与C++模板几乎没有共同点,并且不太可能找到任何合理的方法以与D链接兼容的方式表达C++模板.

这意味着可能永远无法从D中访问C++ STL和C++ Boost.

不可否认,我可能永远不需要std::vector编码D,但我喜欢使用QT提升.

那是什么交易.为什么C++在D中表达非平凡的类很难?是否值得添加一些特殊的注释或某些东西来表达至少名称空间?


更新:"D在工程中有命名空间支持"来自Walter Bright.

And*_*scu 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容器链接的需要,即使对于无法负担垃圾收集的紧凑应用也是如此.

  • 我特别想要的升级库是Boost.Asio.我不知道有类似的跨平台网络库.我相信我能找到其他人.此外,并不是类似的库不能用D编写,而是它已经被编写,测试过,并且已经使用了很多不同的项目. (2认同)

Mic*_*urr 17

正如Hans Passant在评论中提到的那样,在不同的C++编译器中甚至不支持D和C++之间所需的互操作性.有一个C++ ABI(应用程序二进制接口)标准似乎有一些支持,但我不确定究竟有多广泛(英特尔,GCC和ARM编译器似乎遵循ABI).我没有必要使用它,我不确定微软是否坚持使用它的x86或x64编译器(我想它可能适用于ia64,因为那是ABI标准的开始).

有关C++ ABI的一些详细信息,请参阅Joe Goodman的"互操作性和C++编译器".

也许Walter Bright可以说服支持与符合ABI标准的C++库/对象的D互操作性(虽然我不确定他可能优先考虑它的位置).