`
jnn
  • 浏览: 283486 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

读取配置文件动态创建对象[C++](4)

    博客分类:
  • OO
阅读更多

 

全局函数

 

在全局函数中完成 LoggerAppender 的初始化工作

initializeFactoryRegistry ();

 

void   initializeFactoryRegistry () {

        AppenderFactoryRegistry & reg = getAppenderFactoryRegistry ();

        auto_ptr < AppenderFactory > ptr1 ( new   ConsoleAppenderFactory ());

        reg . put ( ptr1 );

        auto_ptr < AppenderFactory > ptr2 ( new   NullAppenderFactory ());

        reg . put ( ptr2 );

        auto_ptr < AppenderFactory > ptr3 ( new   FileAppenderFactory ());

        reg . put ( ptr3 );

        auto_ptr < AppenderFactory > ptr4 ( new   RollingFileAppenderFactory ());

        reg . put ( ptr4 );

        auto_ptr < AppenderFactory > ptr5 ( new   DailyRollingFileAppenderFactory ());

        reg . put ( ptr5 );

        auto_ptr < AppenderFactory > ptr6 ( new   SocketAppenderFactory ());

        reg . put ( ptr6 );

#if defined( _WIN32 )

        auto_ptr < AppenderFactory > ptr7 ( new   NTEventLogAppenderFactory ());

        reg . put ( ptr7 );

#elif defined( HAVE_SYSLOG_H )

        auto_ptr < AppenderFactory > ptr8 ( new   SysLogAppenderFactory ());

        reg . put ( ptr8 );

#endif

        LayoutFactoryRegistry & reg2 = getLayoutFactoryRegistry ();

        auto_ptr < LayoutFactory > ptr21 ( new   SimpleLayoutFactory ());

        reg2 . put ( ptr21 );

        auto_ptr < LayoutFactory > ptr22 ( new   TTCCLayoutFactory ());

        reg2 . put ( ptr22 );

        auto_ptr < LayoutFactory > ptr23 ( new   PatternLayoutFactory ());

        reg2 . put ( ptr23 );

 

        FilterFactoryRegistry & reg3 = getFilterFactoryRegistry ();

        auto_ptr < FilterFactory > ptr31 ( new   DenyAllFilterFactory ());

        reg3 . put ( ptr31 );

        auto_ptr < FilterFactory > ptr32 ( new   LogLevelMatchFilterFactory ());

        reg3 . put ( ptr32 );

        auto_ptr < FilterFactory > ptr33 ( new   LogLevelRangeFilterFactory ());

        reg3 . put ( ptr33 );

        auto_ptr < FilterFactory > ptr34 ( new   StringMatchFilterFactory ());

        reg3 . put ( ptr34 );

}

 

通过这种方式来实现  

              AppenderFactoryRegistry

                   LayoutFactoryRegistry

                   FilterFactoryRegistry

                   的初始化工作 如果要加入新的类型的数据的支持 , 需要将这部分的内容也要实现

       

          如何利用 Registry 中的内容来实现对象数据的创建 ?

注意

得到的指针内容都是 Factory 中定义的内容 ,

通过调用 Factory 方法来获取具体的能够使用的对象的实例

        


 
分享到:
评论

相关推荐

    C++程序案例MFCFrmX

    打算写一个C++程序 其实我是想用MFC静态库实现一个通过TXT配置文件在程序中动态创建界面的程序。 &lt;br&gt;主要思路是: &lt;br&gt;提供一个基类CSearchBaseDialog,在基类中,程序从配置文件中读取界面控件的信息,然后...

    QT&C++ 学生成绩管理系统 ,无需配置环境,有安装包,适合快速理解.zip

    构建项目时,MOC工具读取C++源文件,当它发现类的定义里有Q_OBJECT宏时,它就会为这个类生成另外一个包含有元对象支持代码的C++源文件,这个生成的源文件连同类的实现文件一起被编译和连接。 除了信号和槽机制外,...

    C++网络爬虫项目

    由WebCrawler对象在从MultiIo对象中等到套接字描述符可读时动态创建,通 过Socket对象接收超文本传输协议响应。WEBCRAWLER 网络爬虫实训项目 9 2.3.4. 网络爬虫(WebCrawler) 代表整个应用程序的逻辑对象,构建并维护...

    Visual C++程序开发范例宝典(光盘) 第八部分

    实例214 动态创建视图 实例215 通过视图更改数据 实例216 删除视图 8.6 触发器 实例217 创建触发器 实例218 在程序中使用触发器 8.7 存储过程 实例219 创建存储过程 实例220 删除存储过程 实例221 在程序...

    Visual C++程序开发范例宝典(PDF扫描版).part3

     cc实例214 动态创建视图   cc实例215 通过视图更改数据   cc实例216 删除视图   8.6 触发器   cc实例217 创建触发器   cc实例218 在程序中使用触发器   8.7 存储过程   cc实例219 创建存储...

    C++Builder精彩编程实例集锦的源代码后3部分.rar

    实例026 如何动态创建程序表单 实例027 如何遍历窗体所有组件 实例028 如何保证组件位置相对固定 实例029 如何在窗体中动态增加组件 实例030 如何使组件在程序运行时可以移动 实例031 如何使用组件创建托盘程序...

    Visual C++ 程序开发范例宝典 源码 光盘 part2

    8.3 更新数据 cc实例210 批量修改数据 cc实例211 将指定字段数据为空的记录添上数据 8.4 删除数据 cc实例212 删除单条数据 cc实例213 删除数据库中无用处的记录 8.5 视图 cc实例214 动态创建视图 cc...

    Visual C++程序开发范例宝典(PDF扫描版).part2

     cc实例214 动态创建视图   cc实例215 通过视图更改数据   cc实例216 删除视图   8.6 触发器   cc实例217 创建触发器   cc实例218 在程序中使用触发器   8.7 存储过程   cc实例219 创建存储...

    C++Builder精彩编程实例集锦的源代码前3部分.rar

    实例026 如何动态创建程序表单 实例027 如何遍历窗体所有组件 实例028 如何保证组件位置相对固定 实例029 如何在窗体中动态增加组件 实例030 如何使组件在程序运行时可以移动 实例031 如何使用组件创建托盘程序...

    Linux多线程服务端编程:使用muduo C++网络库

    《Linux多线程服务端编程:使用muduo C++网络库》主要讲述采用现代C++在x86-64 Linux上编写多线程TCP网络服务程序的主流常规技术,重点讲解一种适应性较强的多线程服务器的编程模型,即one loop per thread。...

    Visual C++程序开发范例宝典(光盘) 第四部分

    实例214 动态创建视图 实例215 通过视图更改数据 实例216 删除视图 8.6 触发器 实例217 创建触发器 实例218 在程序中使用触发器 8.7 存储过程 实例219 创建存储过程 实例220 删除存储过程 实例221 在程序...

    MFCFrm.rar

    打算写一个C++程序 其实我是想用MFC静态库实现一个通过TXT配置文件在程序中动态创建界面的程序。 &lt;br&gt;主要思路是: &lt;br&gt;提供一个基类CSearchBaseDialog,在基类中,程序从配置文件中读取界面控件的信息,然后...

    vc++ 开发实例源码包

    详细讲解了Crypt++的加密解密的使用以及其它的加密解密方法(例如base64加解密、哈希加解密以及其它的文件加解密),分静态库和动态库方法。 JSCalls_demo js调用的演示源码 树控件拖动 演示了在树控件中来回拖动...

    Android C++高级编程:使用NDK_Onur Cinar, 于红PDF电子书下载 带书签目录 完整版

    6.3.3 C++的动态内存管理 139 6.4 标准文件I/O 141 6.4.1 标准流 141 6.4.2 使用流I/O 141 6.4.3 打开流 142 6.4.4 写入流 143 6.4.5 流的读取 145 6.4.6 搜索位置 148 6.4.7 错误检查 149 6.4.8 关闭流 ...

    JAVA上百实例源码以及开源项目

    6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用...

Global site tag (gtag.js) - Google Analytics