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



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

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

这意味着编译器需要知道模板的完整代码,因此不可能将其排除在.di文件之外

在处理模板的使用时,D需要所有关于模板的信息。但是,没有理由需要将这些信息编码为原始源代码(OTOH,作为实现细节,所有当前的D编译器都需要这样做)。对于模板强于泛型的语言来说,这是一个基本问题。这句话的含义取决于你想做什么。

如果你对接口和实现分离的兴趣是隐藏实现(如在C中提供二进制库和头文件),那么这是不可能做到的。你能得到的最接近的是某种代码混淆系统。

另一方面,如果您有兴趣避免每次重新编译时重新处理模板的成本,那么像二进制预编译头格式这样更通用的东西可以允许在编译其他几个模块时重用词法、语法和一些传递的结果。事实上,用D比用c要简单得多。

第三种选择是链接时代码生成,但这与传统的链接没有什么区别,因为它大量使用了预编译头文件的模拟。

最新更新