[入门] 不暴露具体实现的类库写法
shawind
2007-05-17
自己琢磨出来的,不知道D的标准写法是不是这样。
1.类c方式的 t1.d import std.stdio; void hello (char[] s){ writefln(s); } dmd -c t1.d lib -c t1.lib ti.obj 这样就得到t1.lib,然后重写一个t1.d t1.d import std.stdio; void hello(char[]); 具体的使用 tt.d import t1; void main(){ hello("hello!"); } dmd tt.d t1.lib 运行tt.exe,结果是打印出hello! 2.类c++方式的 t2.d import std.stdio; class Hello{ this(char[] s){ writefln(s); } } dmd -c t2.d lib -c t2.lib t2.obj 是和上面一样的。再改写t2.d t2.d import std.stdio; class Hello{ this(char[]); } tt.d import t2; void main(){ Hello a = new Hello("hello!"); } dmd tt.d t2.lib tt.exe还是在命令行打印出hello! ps1.这里的函数和类都很简单,不知道复杂的能不能实现 ps2.interface也应该可以用类似的方法 |
|
ideage
2007-05-17
也可以写成DLL.
|
|
qiezi
2007-05-17
这样就得维护两份代码了,还是用接口吧。
|
|
oldrev
2007-05-17
又回到C/C++的老路上了,我觉得D相对于C++最吸引我的地方就在于免去了头文件的麻烦。
以后编译器产生的.di文件应该会除去不必要的实现的。 |
|
shawind
2007-05-17
现在再仔细想想,果然还是用接口的好。
.di的话,自动去和手动去,还是同一个思路。 我是从c转来的,还是比较习惯c这样的方式。 以后慢慢改吧。 |
|
shawind
2007-05-17
恩,那个,用接口怎么做?
刚才,我试验了一下,最后发现凡是我写出来的,都还是像c那样的东西。-_-! 先谢了。 |
|
oldrev
2007-05-17
参考 COM
|
|
shawind
2007-05-18
目的只是写一个并不是很大的小类库(游戏引擎)就要去参考COM
D语言还真是………… |
|
ideage
2007-05-18
就是写个接口的文件,编译时两边引用。COM就是这个样子的。
|
|
qiezi
2007-05-18
common.d:
interface IFoo { void foo(); } export IFoo GetFooObject(); common_impl.d: class Foo : IFoo { // ... } IFoo GetFooObject(){ return new Foo; } 给客户common.d和lib文件就可以了,客户调用: import common; void main() { IFoo foo = GetFooObject(); foo.foo(); } |