中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > 综合其它
一个新的Factory,一个Creator以及它们的完美结合(一)
作者:未知 时间:2005-07-27 23:32 出处:CSDN 责编:chinaitpower
              摘要:一个新的Factory,一个Creator以及它们的完美结合(一)
这两个玩意令人振奋。Loki::Factory必须接受一个可调用体作为CreatePolicy, 比如一个函数指针,一个Functor对象。所以如果要在工厂注册20个产品,就必须有20个名字不同的生成函数,这样很烦。 //Loki::Factory 接口: template < class AbstractProduct, typename IdentifierType, typename ProductCreator = AbstractProduct* (*)(), class FactoryErrorPolicy = DefaultFactoryError > class Factory : public FactoryErrorPolicy 我的目标是:用摸板来实现ProductCreator,当一个类的名字传给Creator时, 这个类的生成函数将自动产生。于是我写了下面的代码: template struct GAbstractCreator { virtual AbstractProduct* operator()() {throw();return 0;} }; template < class Product, class AbstructProduct = GObject, class CreatePolicy = Loki::CreateUsingNew > struct GProductCreator : public GAbstractCreator { Product* pP; AbstructProduct* operator()() { return CreatePolicy::Create(pP);} //CreatePolicy::Create() //If the compiler is better. }; 这样,我的目标就快实现了:如果GTank从GObject(Game Object)派生, 就可以这样用GProductCreator: typedef GProductCreator TankCreator; 如果要生成一个GTank对象,传回一个GObject*指针,你就可以这样做: GObject* pO = TankCreator()(); vector vo; vo.push_back( TankCreator()() ); 这样看上去不错,但是这还没有体现出GProductCreator的真正威力, 它真正的价值在与Factory的合作中。 我希望一个Factory可以这样运作: typedef unsigned long identifier_type; typedef Factory> TheFactory; TheFactory theFactory; theFactory.Register(1, &GProductCreator() ); theFactory.Register(2, &GProductCreator() ); //缺省摸板参数。 需要解释一下: 传入Factory的第三个摸板参数是GAbstractCreator, 着就意味着当你注册一个产品时,Register的第二个参数必须具有 GAbstractCreator()* 的型别, 一个 &GProductCreator() 是不是一个 GAbstractCreator()* 呢?这是一个关键问题。必须保证类 GAbstractCreator 是 GProductCreator 的基类。我精心设计了GProductCreator并让它从GAbstactCreator派生, 使得这成为现实。
关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有