原文 理想方法
是让每个头文件
都有自己的模块
.
这几乎需要DMD
合并C预处理器
,对吧?因为这是可靠
确定包含
哪些标头
的唯一方法
.
最好方法是实现C23
的带相同标签的相同类型是一样的,标签
兼容规则的一些变体
.导入
到全局C命名空间
表明,不能使用类型
定义冲突的两个C标头
.理想,使用D中的C
应该比使用C
中的C更好,并且允许在C模块
之间混合
兼容类型同时,通过模块
系统解决.
ImportC
对D来说是个很好的功能
.
这就是我在聊天线程
中说"用别名
"的原因.importc
模块本质上是选择性
地仅从神奇模块中导入
实际声明内容,并提供相同行为,但由于在别处规范名+定义
及合并
,别名
不会导致类型冲突
.
实现
可能较难,因为你通过导入过程
修改了伪模块
.很容易出现前向引用
错误.可手动测试该概念
.以博客
中相同示例为例,该示例在dmd主线
上使用importC
失败:
现在成功
编译测试程序
.
由于选择性
导入机制.如果删除导入,你正确获得:
dd(7)
:错误:未定义的saySomethingToAFile
标识符.
该方案
兼容C和D
声明规则,无大的命名空间惊喜
(编译器也应禁止
导入神奇的内部实现
模块,这样人们就不会直接戳它),并且,这可能是可行
的.