青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

攀升·Uranus


Something Different,Something New
數(shù)據(jù)加載中……

可以根據(jù)字符串創(chuàng)建類嗎--解決方案 熟練c/c++(六)

想了很久,結合c++設計新思維的方法,大家這種設計會有什么問題?


-----------IShape.h-----------------
class IShape
{
public:
 IShape()
 {
  printf("\n IShape\n");
 }
 virtual ~IShape()
 {
  printf("\n ~IShape\n");
 }
 virtual void Draw() = 0;
};

typedef const char* ShapeType;
typedef IShape* (*Creator)();


------------ShapeFactory.h--------------------

class ShapeFactory {
public:
    static ShapeFactory& Instance() {
        static ShapeFactory instance;
        return instance;
    }

    IShape* Create(ShapeType shapeType);
    bool RegisterShape(ShapeType shapeType, Creator creator);

private:
    ShapeFactory() {}
 std::map<ShapeType, Creator> shapeCreators;
};

------------ShapeFactory.cpp--------------------

#include "CFactory.h"

IShape* ShapeFactory::Create(ShapeType shapeType) {
      Creator creator = shapeCreators.find( shapeType )->second;
 
      if ( creator == NULL ) 
      { 
           return NULL; 
       }
       return creator();
}

bool ShapeFactory::RegisterShape( ShapeType shapeType, Creator creator ) {
       map<ShapeType, Creator>::iterator iter;
       iter = shapeCreators.find(shapeType);
       if(iter != shapeCreators.end())
       {
           return false;
       } else {
           shapeCreators[shapeType] = creator;
           return true;
    }
}

------------CCircle .h--------------------
#include<stdio.h>

#include "IShape.h"
#include "CFactory.h"
class CCircle : public IShape
{
public:
 CCircle()
 {
  printf("\n CCircle\n");
 }
 virtual ~CCircle()
 {
  printf("\n ~CCircle\n");
 }

 virtual void Draw();
};


------------CCircle .cpp--------------------
#include "CCircle.h"

IShape* Create() { return new CCircle(); }
static const bool RegisterShape__ = ShapeFactory::Instance().RegisterShape( "CCircle", Create);

void CCircle::Draw()
{
 printf("\n CCircle::Draw\n");
}


------------main.cpp--------------------
#include<stdio.h>
#include"CFactory.h"

#include "IShape.h"

int main() {
    IShape* line = ShapeFactory::Instance().Create("CCircle");
    line->Draw();    
    return 0;
}

有點小小的興奮,大家積極發(fā)言喲!!!

主要參考: http://blog.csdn.net/jicao/archive/2006/07/01/861343.aspx 
                     http://blog.csdn.net/hjsunj/archive/2008/01/07/2028597.aspx
                     《c++設計新思維》

posted on 2009-01-12 22:29 攀升 閱讀(2529) 評論(28)  編輯 收藏 引用 所屬分類: C/C++

評論

# re: 可以根據(jù)字符串創(chuàng)建類嗎--解決方案   回復  更多評論   

建議先看看mfc的dynamicCreate,
里面的宏很好用啊
2009-01-12 23:44 | 夜弓

# re: 可以根據(jù)字符串創(chuàng)建類嗎--解決方案   回復  更多評論   

與動態(tài)語言有何異
2009-01-13 04:34 | bug

# re: 可以根據(jù)字符串創(chuàng)建類嗎--解決方案   回復  更多評論   

Gems5 里面有篇關于組件的文章也是講這個思想的,可以看看~~
2009-01-13 09:10 | 飄飄白云

# re: 可以根據(jù)字符串創(chuàng)建類嗎--解決方案   回復  更多評論   

孺子可教
抄的不錯
2009-01-13 09:32 | cj

# re: 可以根據(jù)字符串創(chuàng)建類嗎--解決方案   回復  更多評論   

這個方法也是不錯的啊!

很不錯@
2009-01-13 11:26 | 夢在天涯

# re: 可以根據(jù)字符串創(chuàng)建類嗎--解決方案 [未登錄]  回復  更多評論   

不錯,很好的思路。
樓上各位需要明白下 空杯心理。
2009-01-13 11:41 | cppexplore

# re: 可以根據(jù)字符串創(chuàng)建類嗎--解決方案   回復  更多評論   

結果還是用了一個Map嘛……都說了,只能這樣。

兩個月前我實現(xiàn)了一個簡單的serialization,其中就有一個這樣的功能。這幾天決定重寫。
2009-01-13 12:43 | 陳梓瀚(vczh)

# re: 可以根據(jù)字符串創(chuàng)建類嗎--解決方案   回復  更多評論   

原來你的需求是這樣的,一般的工廠模式解決的就是這個問題。
2009-01-13 13:31 | eXile

# re: 可以根據(jù)字符串創(chuàng)建類嗎--解決方案   回復  更多評論   

@夜弓
據(jù)我同事說那個實現(xiàn)起來很復雜,所以我一直沒有看
2009-01-13 13:36 | 攀升

# re: 可以根據(jù)字符串創(chuàng)建類嗎--解決方案   回復  更多評論   

@bug
就是用C++實現(xiàn)類似JAVA里面的類似反射機制,
就是我寫的太搓了
2009-01-13 13:37 | 攀升

# re: 可以根據(jù)字符串創(chuàng)建類嗎--解決方案   回復  更多評論   

那這個IShape把所有的接口都設計好了,按名創(chuàng)建就行了。
這用不到RTTI。
所謂反射應該是這樣的,有一個公共類Object, 使用如下:
Object* object = createByName(“Circle”);
object->invoke("draw");
2009-01-13 13:40 | eXile

# re: 可以根據(jù)字符串創(chuàng)建類嗎--解決方案   回復  更多評論   

@飄飄白云
不好意思,我是搞嵌入式開發(fā)的,指教下你這個Gems5是什么技術?
2009-01-13 13:40 | 攀升

# re: 可以根據(jù)字符串創(chuàng)建類嗎--解決方案   回復  更多評論   

@cj

呵呵,學習學習,謝謝你的指點。
2009-01-13 13:42 | 攀升

# re: 可以根據(jù)字符串創(chuàng)建類嗎--解決方案   回復  更多評論   

@夢在天涯
謝謝老大的支持,我會更加努力!!!!
2009-01-13 13:43 | 攀升

# re: 可以根據(jù)字符串創(chuàng)建類嗎--解決方案   回復  更多評論   

@cppexplore
謝謝,共同交流.
2009-01-13 13:48 | 攀升

# re: 可以根據(jù)字符串創(chuàng)建類嗎--解決方案   回復  更多評論   

@陳梓瀚(vczh)
是的,這個思想主要是static初始化時會自動執(zhí)行注冊
2009-01-13 13:56 | 攀升

# re: 可以根據(jù)字符串創(chuàng)建類嗎--解決方案   回復  更多評論   

@eXile
好像是不行吧,
2009-01-13 14:02 | 攀升

# re: 可以根據(jù)字符串創(chuàng)建類嗎--解決方案   回復  更多評論   

我靠!這個博客寫得太好了!
2009-01-13 20:20 | PITHY LU

# re: 可以根據(jù)字符串創(chuàng)建類嗎--解決方案   回復  更多評論   

@PITHY LU
我靠,這是誰呀,贊美還是諷刺呀??
2009-01-13 20:23 | 攀升

# re: 可以根據(jù)字符串創(chuàng)建類嗎--解決方案   回復  更多評論   

@攀升
不是特別復雜來著~
2009-01-14 09:40 | 夜弓

# re: 可以根據(jù)字符串創(chuàng)建類嗎--解決方案   回復  更多評論   

兄弟們,不要高興太早!
我是原作者,當然知道有什么漏洞。
請注意線程安全。
靜態(tài)函數(shù)的方法也是無奈之舉,要完整的需要考慮線程安全。
2009-01-14 12:26 | cj

# re: 可以根據(jù)字符串創(chuàng)建類嗎--解決方案   回復  更多評論   

攀升:麻煩你在文章里給出我的原文鏈接。我有詳細的解釋,便于大家閱讀。
2009-01-14 12:30 | cj

# re: 可以根據(jù)字符串創(chuàng)建類嗎--解決方案   回復  更多評論   

@cj
我找了找,應該是參考這個文章的和c++新思維上的代碼,請問這是你的原文嗎:
http://blog.csdn.net/hjsunj/archive/2008/01/07/2028597.aspx

如果不是,請給出你的文章地址,我再學習學習!

這些代碼不都是c++新思維上的代碼嗎?
2009-01-14 12:46 | 攀升

# re: 可以根據(jù)字符串創(chuàng)建類嗎--解決方案   回復  更多評論   

RE:
@飄飄白云
不好意思,我是搞嵌入式開發(fā)的,指教下你這個Gems5是什么技術?

《Game programming Gems5》中1.3節(jié)“基于組件的對象管理”,里面的解決方案與你上面的解決方案很類同的,呵呵,當然你的要簡單清晰些~~
2009-01-14 21:45 | 飄飄白云

# re: 可以根據(jù)字符串創(chuàng)建類嗎--解決方案   回復  更多評論   

@飄飄白云
好的,我知道了,看來主體思想還是基于組件的對象管理
2009-01-15 10:26 | 攀升

# re: 可以根據(jù)字符串創(chuàng)建類嗎--解決方案   回復  更多評論   

原文在
http://blog.csdn.net/jicao/archive/2006/07/01/861343.aspx

hjsunj說注冊部分用宏實現(xiàn)。其實這是各人的喜好,沒有本質(zhì)的區(qū)別。
http://blog.csdn.net/hjsunj/archive/2008/01/07/2028597.aspx

Loki當然也可以做,但那是一把牛刀。用那個自己決定。
2009-01-15 12:06 | cj

# re: 可以根據(jù)字符串創(chuàng)建類嗎--解決方案   回復  更多評論   

@cj

謝謝您的鏈接
2009-01-15 23:04 | 攀升

# re: 可以根據(jù)字符串創(chuàng)建類嗎--解決方案 熟練c/c++(六)  回復  更多評論   

加個原文鏈接也好
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            黄色成人在线免费| 欧美日韩免费在线| 在线观看视频亚洲| 亚洲国产精品www| 欧美精品福利| 午夜亚洲激情| 久热re这里精品视频在线6| 亚洲欧洲一区| 亚洲免费视频网站| 亚洲国产色一区| 亚洲图片激情小说| 在线观看欧美日本| 日韩亚洲欧美成人| 黑人一区二区三区四区五区| 亚洲国产欧美在线人成| 国产精品福利久久久| 久久综合九色综合欧美就去吻| 欧美www视频| 欧美一区二区三区在线| 欧美jizz19性欧美| 久久都是精品| 欧美日韩国产综合网 | 亚洲人成人一区二区三区| 在线视频免费在线观看一区二区| 黄色成人小视频| 亚洲午夜精品久久久久久app| 亚洲欧美日韩国产一区| 欧美日韩另类丝袜其他| 久久精品麻豆| 欧美日韩另类在线| 女同一区二区| 国产午夜精品视频免费不卡69堂| 亚洲国内精品在线| 黄色av日韩| 午夜久久99| 亚洲一区免费视频| 欧美精品播放| 欧美高清视频www夜色资源网| 国产精品美女久久福利网站| 亚洲日本va午夜在线影院| 黄色亚洲网站| 亚洲欧美中文日韩在线| 亚洲一区二区三区精品视频| 蜜月aⅴ免费一区二区三区| 久久久国产成人精品| 国产精品wwwwww| 亚洲乱亚洲高清| 亚洲精品九九| 欧美成人在线免费观看| 免费观看成人www动漫视频| 国产日产亚洲精品| 亚洲淫性视频| 欧美在线视频观看| 国产精品视频第一区| 亚洲视频一区在线| 亚洲影院高清在线| 国产精品福利片| 亚洲自拍高清| 久久成人精品视频| 国产一区视频网站| 久久精品人人爽| 女同性一区二区三区人了人一| 一区二区三区无毛| 蜜臀a∨国产成人精品| 欧美激情综合色| 日韩亚洲视频在线| 国产精品二区在线| 亚洲欧美成人一区二区在线电影| 欧美一区二区在线观看| 国产手机视频精品| 久久噜噜亚洲综合| 欧美激情第二页| 一区二区三区久久| 国产精品一二一区| 欧美综合激情网| 欧美激情亚洲激情| 亚洲深夜激情| 国产亚洲成人一区| 美女黄网久久| av成人免费| 久久久国产精品一区二区中文| 亚洲第一视频| 欧美日韩在线观看一区二区| 亚洲欧美999| 欧美电影免费观看网站| 中文一区二区| 国内精品久久久久伊人av| 免费短视频成人日韩| 亚洲深夜激情| 免费一级欧美片在线观看| 一区二区三区成人 | 午夜一区二区三区不卡视频| 鲁大师影院一区二区三区| 亚洲欧洲视频在线| 久久久久久九九九九| 久久综合给合久久狠狠色| 国产欧美日韩免费| 模特精品裸拍一区| 在线一区二区三区四区| 美玉足脚交一区二区三区图片| 亚洲毛片在线看| 国产一区二区剧情av在线| 欧美成人黄色小视频| 午夜久久tv| 99综合在线| 亚洲电影免费在线观看| 欧美在线啊v| 一区二区三区四区五区精品| 国产综合色一区二区三区| 欧美日韩在线精品| 欧美福利电影网| 久久国产精品99久久久久久老狼 | 久久躁日日躁aaaaxxxx| 亚洲四色影视在线观看| 亚洲黄色在线| 黄色一区三区| 国模精品一区二区三区| 国产精品老牛| 欧美日韩中文另类| 欧美搞黄网站| 免费影视亚洲| 久久免费视频在线| 久久精品日产第一区二区| 亚洲欧美春色| 亚洲主播在线观看| 亚洲一区二区三区在线观看视频| 亚洲全部视频| 亚洲国产精品一区二区久| 模特精品在线| 欧美成人免费在线| 欧美va亚洲va国产综合| 久久综合免费视频影院| 久久久久久久性| 久久精品国产77777蜜臀| 久久福利资源站| 欧美在线视频免费| 久久久久久久综合狠狠综合| 欧美一区二区三区的| 欧美专区亚洲专区| 久久精品视频在线免费观看| 久久久久国产一区二区三区四区 | 亚洲精品男同| 亚洲精品国产品国语在线app| 亚洲激情网址| 一区二区三区**美女毛片| 一本一道久久综合狠狠老精东影业| 99v久久综合狠狠综合久久| 亚洲国产日韩欧美在线动漫 | 国产精品三级视频| 欧美在线视频二区| 久久久久综合| 欧美大成色www永久网站婷| 欧美国产高清| 亚洲美女色禁图| 亚洲图片你懂的| 久久精品免费电影| 欧美91福利在线观看| 欧美日韩系列| 国产亚洲一区精品| 亚洲日本电影| 亚洲欧美日韩国产精品| 久久夜色精品一区| 亚洲欧洲视频在线| 亚洲免费在线看| 久久嫩草精品久久久精品| 欧美精品国产一区| 国产日韩视频| 亚洲人屁股眼子交8| 久久久亚洲成人| 亚洲专区在线视频| 日韩一二三区视频| 欧美在线免费一级片| 欧美激情在线| 亚洲午夜电影| 免费欧美高清视频| 国产精品xnxxcom| 亚洲电影自拍| 性色av一区二区三区红粉影视| 欧美大胆人体视频| 亚洲欧美日本国产有色| 欧美 亚欧 日韩视频在线| 国产精品亚洲综合一区在线观看 | 亚洲国产精品va在线看黑人动漫| 一区二区三区 在线观看视频| 久久蜜桃av一区精品变态类天堂| 亚洲人成啪啪网站| 久久久久久久久久看片| 国产精品久在线观看| 亚洲精选视频免费看| 久久久久久久尹人综合网亚洲| 亚洲美女中文字幕| 久久蜜桃资源一区二区老牛| 国产精品私房写真福利视频| 亚洲美女啪啪| 欧美激情成人在线视频| 欧美在线中文字幕| 国产精品三上| 亚洲女人av| 99riav久久精品riav| 免费日本视频一区|