<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 閱讀(1803) 評論(0)  編輯  收藏 所屬分類: 軟件開發(fā)
      自從離開學(xué)校就基本上不再使用C++了,最近卻又因?yàn)轫?xiàng)目上的原因重新走入這一迷失的世界, 感覺很是缺乏一些順手的工具。首先就是做配置管理有點(diǎn)麻煩, 因?yàn)槿狈Ψ瓷錂C(jī)制, 無法直接映射, 所以一般需要手工書寫配置設(shè)置功能.
      我們希望配置類在配置階段能夠支持動態(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)部使用時支持直接的屬性訪問,便于編譯器檢查, 也提高運(yùn)算速度。
            t_float b = cfg.bgColor.b;
            bool l 
    = cfg.lightEnabled;


    所幸C++的類型系統(tǒng)能夠偷偷的去干很多見不得人的勾當(dāng),因此便有了下面這個簡易機(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>中提供的對變體數(shù)據(jù)類型的封裝。使用S_P和G_P這樣的宏可以由編譯器檢查變量名的正確性。
    主站蜘蛛池模板: 久久精品成人免费看| 青草青草视频2免费观看| 成在人线av无码免费高潮喷水| 日韩一级在线播放免费观看| 色爽黄1000部免费软件下载| 午夜精品在线免费观看| 亚洲日本va一区二区三区| 永久免费的网站在线观看| 亚洲一区二区三区国产精品无码| 最近2019年免费中文字幕高清| 精品亚洲国产成AV人片传媒| **真实毛片免费观看| 国产特级淫片免费看| 妇女自拍偷自拍亚洲精品| 免费一级做a爰片性色毛片| 一级特黄a免费大片| 亚洲人成色7777在线观看| 久久久精品免费视频| 亚洲最大的视频网站| 国产又黄又爽又猛免费app| 亚洲第一成年网站视频| 日韩亚洲国产综合久久久| gogo免费在线观看| 亚洲av日韩综合一区在线观看| 免费A级毛片无码A∨免费| 亚洲一区二区无码偷拍| 亚洲欧洲精品成人久久曰影片 | 无码专区—VA亚洲V天堂| 最近中文字幕大全中文字幕免费| 亚洲午夜精品一区二区公牛电影院 | 色www免费视频| 亚洲国产精品成人久久| 国产片AV片永久免费观看| 黄色毛片视频免费| 亚洲an天堂an在线观看| 国产精品免费观看久久| 美女扒开尿口给男人爽免费视频| 好看的亚洲黄色经典| 成人片黄网站A毛片免费| sss日本免费完整版在线观看| 亚洲福利在线视频|