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

    2006-02-02

    Tag:OO

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://jnn.blogbus.com/logs/1879300.html

    问题的由来

    使用过Log4J 的朋友应该有这样酷的体会,通过修改配置文件可以很方便得实现对应用程序的日志行为进行定义,而这些都不需要修改任何的应用程序代码。也许你会说,这些在Java中是很容易实现的(使用classforname 就可以很容易实现了)。

    但是对于使用C++来进行日常开发的朋友,如果要实现这样的功能又如何来做呢?因为C++语言本身并不支持这样的通过读取配置文件动态创建对象的功能。

    Log4Cplus  中,使用C++来这种动态配置生成对象的功能,它是怎么实现呢?要知道C++可没有类似于javaclass loader以及 reflection 机制,看来需要自己动手来实现通过读取配置产生合适的logger appender对象了。

    好在Log4Cplus是一个为C++开发的开源logger库,它实现了一个C++版的Log4J。我们可以通过分析它来探究一下C++实现读取配置文件动态创建对象实现原理。  

    分析功能,通过读取配置文件后获得需要加载的信息内容,然后通过相关对象实例模块来实现对象实例化操作。

    初步分析, 系统通过读取配置文件来负责加载相关的类实例, 因此分析可以从配置模块内部入手, 实现基本的初始化分析。

    通过分析源代码目录发现与系统配置相关的对象有以下几部分内容

    Properties

    PropertyConfigurator

    BasicConfigurator

     http://jnn.blogbus.com/files/1138850277.jpg

    重点分析 PropertyConfigurator中的相关代码模块。

    下面将结合PropertyConfigurator中的实例来进行分析

    如何实现Appender的动态可配置功能

    --需要分析方法实现

    --- initializeLog4cplus();

    ---configureAppenders();

    ---configureLoggers();

    ---configureAdditivity();

     

     

     

     

     

     

     

     


    收藏到:Del.icio.us




    评论

  • 各个c++的库都有自己的rtti增强,

    比如mfc的宏实现。