[入门] 不暴露具体实现的类库写法

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();
}
Global site tag (gtag.js) - Google Analytics