- 注册时间
- 2004-11-1
- 最后登录
- 2018-4-24
版主
- 积分
- 548
|
发表于 2007-12-11 21:03:28
|
显示全部楼层
因为D中完全没有宏功能,要移植c中复杂的宏就只能借助模板之类的东西。
就比如说Windows中H文件吧- #define MAKEFOURCC(ch0, ch1, ch2, ch3) \\
- ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) | \\
- ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 ))
复制代码 这样就可以把MAKEFOURCC当成函数一样到处用了。编译器会在编译期计算出结果。
D中就得写成这样- template T_MAKEFOURCC(ubyte ch0, ubyte ch1, ubyte ch2, ubyte ch3) {
- const T_MAKEFOURCC = cast(uint)ch0 | cast(uint)(ch1 << 8) | cast(uint)(ch2 << 16) | cast(uint)(ch3 << 24 );
- }
复制代码 得用上template才能在编译期算出结果。原来我是不想学什么范型编程的,结果一来二去,对模板倒明白了点。 |
|