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容器链接的需要,即使对于无法负担垃圾收集的紧凑应用也是如此.
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互操作性(虽然我不确定他可能优先考虑它的位置).