2007-03-27
D语言动态创建对象-D最新功能
关键字: D最新功能 动态创建 插件 IOC
我认为这是D提供的又一个重量级的功能.闲言少叙,代码说话!
保存为cre.d,使用dmd cre.d编译.
根据这个功能,结合动态链接库,可以提供简单插件的功能了!!!
实现了IOC,针对抽象进行依赖.
昨天看到,晚上想到了,早晨实现了,现在贴上, 真不错.
保存为cre.d,使用dmd cre.d编译.
module cre;
import std.stdio;
interface IPrinter
{
void print();
void init(char[] a);
}
class foo :IPrinter
{
void print()
{
writefln("foo OK "~fb);
}
void init(char[] a)
{
fb = " Hollo "~a;
}
char[] fb;
}
class fbb :IPrinter
{
void print()
{
writefln("fbb:OK! "~fb);
}
void init(char[] a)
{
fb = "Thank you "~a;
}
char[] fb;
}
//IOC Factory.
class Factory(T)
{
static T create(char[] Name)
{
T instance =cast(T)Object.factory(Name);
assert(instance);
return instance;
}
}
int main()
{
writefln("Factory Test!");
alias Factory!(IPrinter) PT;
IPrinter a = PT.create("cre.foo");
a.init("Walter!");
a.print();
IPrinter b = PT.create("cre.fbb");
b.init("Walter!");
b.print();
return 1;
}
根据这个功能,结合动态链接库,可以提供简单插件的功能了!!!
实现了IOC,针对抽象进行依赖.
昨天看到,晚上想到了,早晨实现了,现在贴上, 真不错.
评论
achun
2007-03-30
有比没有强,用不用看您的选择了,
只要不影响整体就行
只要不影响整体就行
ideage
2007-03-28
应该不会太慢.都是查找,然后创建.如果有多个DLL,我想可能会慢点.
qiezi
2007-03-28
new后面都比较高效了,查找到了就直接调用ClassInfo.create,里面调用_d_newclass,和直接new效率差不多。查找的过程这么慢,哪天发展出java这么庞大的库,调用这个多慢,不过以后肯定会优化的,说说而已。
ideage
2007-03-28
qiezi 写道
里面调用了ClassInfo.find(classname),这个实现效率真低:
[玩具
[玩具
关键要看new操作符是怎么产生对象的.才能够决定吧!
qiezi
2007-03-27
里面调用了ClassInfo.find(classname),这个实现效率真低:
玩具
/*************
* Search all modules for ClassInfo corresponding to classname.
* Returns: null if not found
*/
static ClassInfo find(char[] classname)
{
foreach (m; ModuleInfo.modules())
{
//writefln("module %s, %d", m.name, m.localClasses.length);
foreach (c; m.localClasses)
{
//writefln("\tclass %s", c.name);
if (c.name == classname)
return c;
}
}
return null;
}
玩具
oldrev
2007-03-27
没什么用,既造成一堆 static 的东西,功能又太有限
h_rain
2007-03-27
晕~,这是鸡肋吗?
qiezi
2007-03-27
必须在一个module里面亚,否则就AV了。
h_rain
2007-03-27
哦!
结合上脚本,就极其简单的实现了外置的对象管理功能啊.
结合上脚本,就极其简单的实现了外置的对象管理功能啊.
oldrev
2007-03-27
Walter 同志,赶快住手吧!RTTI的代价可是不小的,再搞就成 java 了。
0.001的升级就能造成兼容问题,这算怎么回事?还是修正 bug,完善标准库要紧。
0.001的升级就能造成兼容问题,这算怎么回事?还是修正 bug,完善标准库要紧。
soulmachine
2007-03-27
不错!
- 浏览: 114213 次

- 详细资料
搜索本博客
最新评论
-
ANSI和Unicode练习后记
要在dfl的listview控件里显示来自mysql的中文字符。 怎么出错了,提 ...
-- by wandernet -
D语言设计模式 Observer
好文!学习
-- by hqs7636 -
ANSI和Unicode练习后记
新年快乐!
-- by oldrev -
ANSI和Unicode练习后记
支持一个!新年快乐!
-- by DavidL -
D语言的IOCP(完成端口) ...
"iocp的使用例子(哪怕是C方式的)在dsource上都找不到一个,仅此一条i ...
-- by ahadf






评论排行榜