论坛首页 综合技术论坛

D语言动态创建对象-D最新功能

浏览 11481 次
精华帖 (1) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-03-27  
我认为这是D提供的又一个重量级的功能.闲言少叙,代码说话!

保存为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,针对抽象进行依赖.

昨天看到,晚上想到了,早晨实现了,现在贴上, 真不错.
   发表时间:2007-03-27  
不错!
0 请登录后投票
   发表时间:2007-03-27  
Walter 同志,赶快住手吧!RTTI的代价可是不小的,再搞就成 java 了。
0.001的升级就能造成兼容问题,这算怎么回事?还是修正 bug,完善标准库要紧。
0 请登录后投票
   发表时间:2007-03-27  
哦!
结合上脚本,就极其简单的实现了外置的对象管理功能啊.
0 请登录后投票
   发表时间:2007-03-27  
必须在一个module里面亚,否则就AV了。
0 请登录后投票
   发表时间:2007-03-27  
晕~,这是鸡肋吗?
0 请登录后投票
   发表时间:2007-03-27  
没什么用,既造成一堆 static 的东西,功能又太有限
0 请登录后投票
   发表时间: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;
    }

玩具
0 请登录后投票
   发表时间:2007-03-28  
qiezi 写道
里面调用了ClassInfo.find(classname),这个实现效率真低:
[玩具


关键要看new操作符是怎么产生对象的.才能够决定吧!
0 请登录后投票
   发表时间:2007-03-28  
new后面都比较高效了,查找到了就直接调用ClassInfo.create,里面调用_d_newclass,和直接new效率差不多。查找的过程这么慢,哪天发展出java这么庞大的库,调用这个多慢,不过以后肯定会优化的,说说而已。
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics