<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 176, comments - 240, trackbacks - 0, articles - 7

    C++配置管理

    Posted on 2008-01-12 20:58 canonical 閱讀(1794) 評(píng)論(0)  編輯  收藏 所屬分類: 軟件開(kāi)發(fā)
      自從離開(kāi)學(xué)校就基本上不再使用C++了,最近卻又因?yàn)轫?xiàng)目上的原因重新走入這一迷失的世界, 感覺(jué)很是缺乏一些順手的工具。首先就是做配置管理有點(diǎn)麻煩, 因?yàn)槿狈Ψ瓷錂C(jī)制, 無(wú)法直接映射, 所以一般需要手工書(shū)寫配置設(shè)置功能.
      我們希望配置類在配置階段能夠支持動(dòng)態(tài)屬性名,
      GConfig cfg;
      cfg.set(
    "bgColor.b",3.0);
      cfg.set(
    "lightEnabled",false);

      t_float b 
    = cfg.get("bgColor.b");
      bool l 
    = cfg.get("lightEnabled");

        但是內(nèi)部使用時(shí)支持直接的屬性訪問(wèn),便于編譯器檢查, 也提高運(yùn)算速度。
            t_float b = cfg.bgColor.b;
            bool l 
    = cfg.lightEnabled;


    所幸C++的類型系統(tǒng)能夠偷偷的去干很多見(jiàn)不得人的勾當(dāng),因此便有了下面這個(gè)簡(jiǎn)易機(jī)制。

    #define S_P(x) do{if(strcmp(name,#x) == 0) { x = value; return; } } while(0)
    #define G_P(x) 
    do{if(strcmp(name,#x) == 0) { value = x; return; } } while(0)

    class _GConfig{
    public:
      bool lightEnabled;

      t_float minX;
      t_float maxX;
      t_float minY;
      t_float maxY;

      _GConfig(){
        
    // initialize all primitive members
        memset(this,0,sizeof(_GConfig));
      }
    };

    class GConfig: public _GConfig{
    public:
      GColor bgColor;

      GConfig(){
      }

      _variant_t get(
    const char* name){
        _variant_t value;
        get(name,value);
        
    return value;
      }

      
    void get(const char* name,_variant_t& value){
        G_P(lightEnabled);

        G_P(minX);
        G_P(maxX);
        G_P(minY);
        G_P(maxY);
       
        G_P(bgColor.r);
        G_P(bgColor.g);
        G_P(bgColor.b);
        G_P(bgColor.a);
      }

      
    void set(const char* name, _variant_t value){
        S_P(lightEnabled);

        S_P(minX);
        S_P(maxX);
        S_P(minY);
        S_P(maxY);
       
        S_P(bgColor.r);
        S_P(bgColor.g);
        S_P(bgColor.b);
        S_P(bgColor.a);
      }
    };

    _variant_t是VC++在<comdef.h>中提供的對(duì)變體數(shù)據(jù)類型的封裝。使用S_P和G_P這樣的宏可以由編譯器檢查變量名的正確性。
    主站蜘蛛池模板: 亚洲精品无码鲁网中文电影| 亚洲人成7777影视在线观看| 日日麻批免费40分钟无码 | 亚洲欧美国产精品专区久久| 国产高清免费在线| 好久久免费视频高清| 亚洲kkk4444在线观看| 久久久久亚洲av成人无码电影 | 亚洲一区二区久久| 亚洲精品无码av天堂| 18禁黄网站禁片免费观看不卡| 麻豆亚洲AV成人无码久久精品 | 另类免费视频一区二区在线观看| 亚洲精品在线免费观看视频| 免费不卡中文字幕在线| 在线美女免费观看网站h| 曰批免费视频播放免费| 亚洲娇小性xxxx| 久久国产亚洲电影天堂| 国产在线观看免费完整版中文版| 久久青草免费91线频观看不卡| 欧美亚洲精品一区二区| 亚洲白色白色在线播放| 在线亚洲午夜理论AV大片| 成年女性特黄午夜视频免费看| 久久大香伊焦在人线免费| 阿v免费在线观看| 在线综合亚洲欧洲综合网站| 久久久久亚洲AV无码专区首| 亚洲福利精品一区二区三区| 99久久这里只精品国产免费| 精品亚洲永久免费精品| 白白色免费在线视频| 2020久久精品亚洲热综合一本| 久久久久久亚洲Av无码精品专口| 久久久久亚洲爆乳少妇无| 国产大片免费观看中文字幕| 岛国av无码免费无禁网站| 亚洲一级免费毛片| 香蕉成人免费看片视频app下载| 暖暖免费中文在线日本|