D是否允许将接口与模板中的实现分开?

时间:2011-11-27 12:28:04

标签: templates interface implementation d

我还没有尝试过D,但它似乎是一种非常有趣的语言,它为C ++中的问题找到了一些巧妙的解决方案。我很好奇,是否也可以将界面与模板中的实现分开?如果是,那怎么办?

2 个答案:

答案 0 :(得分:7)

在编译时没有使用任何模板完全展开

这意味着编译器需要知道模板的完整代码,因此无法将其从.di文件中删除

答案 1 :(得分:2)

在处理模板的 use 时,D需要所有 关于模板的信息。但是,没有理由将此信息编码为原始源代码(OTOH,作为实现细节,所有当前D编译器都需要这样做)。这是任何具有比泛型更强大的模板的语言的基本问题。这种影响取决于你想要做什么。

如果您对分离接口和实现的兴趣是隐藏实现(比如在C中提供二进制库和头文件),那么就无法做到这一点。最接近的是某种代码混淆系统。

另一方面,如果您有兴趣避免每次重新编译重新处理模板的成本,那么像二进制预编译头格式更通用的东西可以允许重用词法,句法和一些的结果。编译其他几个模块的过程。事实上,这对D来说比在C中更简单。

第三个选项是链接时间代码生成,但与传统链接相比,积极使用anolog到预编译头文件没有什么区别。