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

攀升·Uranus


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

提問: 可以根據(jù)字符串創(chuàng)建類嗎


         語言當(dāng)然是c++了,大家可能都碰到了,在使用工廠的時(shí)候其實(shí)還是要在某個(gè)地方寫死new A()這樣的代碼,我現(xiàn)在想根據(jù)配置文件或者其它的途徑創(chuàng)建類(類似于JAVA的反射機(jī)制);
   
         目標(biāo)就是,新加入一個(gè)類時(shí),我不要改動(dòng)原來工廠的代碼,程序知道新加的類的名字的字符串(通過讀配置文件)。

         各位C++大牛們想像辦法,實(shí)在不可能的話,推薦下國外有沒有這種實(shí)現(xiàn)的開源項(xiàng)目
         謝謝了!

posted on 2009-01-10 17:13 攀升 閱讀(2502) 評論(29)  編輯 收藏 引用

評論

# re: 提問: 可以根據(jù)字符串創(chuàng)建類嗎   回復(fù)  更多評論   

C++編譯器的RTTI能力很弱。不過如果夠猛可以寫一個(gè)Front專門給各種類加RTTI就好了。
2009-01-10 17:32 | 空明流轉(zhuǎn)

# re: 提問: 可以根據(jù)字符串創(chuàng)建類嗎   回復(fù)  更多評論   

@空明流轉(zhuǎn)
是的呀,您指的front是什么類?
2009-01-10 17:52 | 攀升

# re: 提問: 可以根據(jù)字符串創(chuàng)建類嗎   回復(fù)  更多評論   

純靠語言的能力是不行的,可以參考mfc的CObject實(shí)現(xiàn),使用宏來模擬
2009-01-10 18:50 | 飄雪

# re: 提問: 可以根據(jù)字符串創(chuàng)建類嗎   回復(fù)  更多評論   

寫一個(gè)編譯器前段,可以給類補(bǔ)充一些代碼。
2009-01-10 19:18 | 空明流轉(zhuǎn)

# re: 提問: 可以根據(jù)字符串創(chuàng)建類嗎   回復(fù)  更多評論   

語言本身沒這個(gè)機(jī)制,正如3樓說的,可以參見mfc的動(dòng)態(tài)創(chuàng)建。。。
2009-01-10 19:45 | dophi

# re: 提問: 可以根據(jù)字符串創(chuàng)建類嗎   回復(fù)  更多評論   

我寫了一個(gè)宏,過會(huì)放上來讓大家批判批判
2009-01-10 20:00 | 攀升

# re: 提問: 可以根據(jù)字符串創(chuàng)建類嗎   回復(fù)  更多評論   

這個(gè)應(yīng)該不難吧
2009-01-10 20:55 | 5748

# re: 提問: 可以根據(jù)字符串創(chuàng)建類嗎   回復(fù)  更多評論   

ACDK這個(gè)庫可以,不過比較大,使用C++語言按照java語言規(guī)范來實(shí)現(xiàn)的基礎(chǔ)庫。不過如果走到這一步,大可不比使用C++了。
2009-01-10 20:59 | 萬連文

# re: 提問: 可以根據(jù)字符串創(chuàng)建類嗎   回復(fù)  更多評論   

Nebula3里的類就有這個(gè)特性
http://blog.csdn.net/xoyojank/archive/2008/07/03/2608400.aspx
具體見SDK源碼
2009-01-10 23:21 | xoyojank

# re: 提問: 可以根據(jù)字符串創(chuàng)建類嗎   回復(fù)  更多評論   

自己構(gòu)造一個(gè)object 類 然后作一套繼承的東西。。 可以看看qt的實(shí)現(xiàn)。
2009-01-10 23:36 | kong

# re: 提問: 可以根據(jù)字符串創(chuàng)建類嗎   回復(fù)  更多評論   

最簡單的辦法

A* CreateA(){return new A();}
B* CreateB(){return new B();}

CreatorMap Map;
Map.Add("A",CreateA());
Map.Add("B",CreateB());

-------------------------------

A* b=Map.Create("A");
B* b=Map.Create("B");

-------------------------------

如果你熟悉模板的話,可以實(shí)現(xiàn)的更漂亮一點(diǎn)。
2009-01-11 00:55 | 陳梓瀚(vczh)

# re: 提問: 可以根據(jù)字符串創(chuàng)建類嗎   回復(fù)  更多評論   

贊同3樓和5樓。移植MFC的RTTI并不難。
2009-01-11 09:26 | Jeff Chen

# re: 提問: 可以根據(jù)字符串創(chuàng)建類嗎   回復(fù)  更多評論   

@陳梓瀚(vczh)
這個(gè)叫object factory吧,你只能解決已知的類,

問題在于我的工廠也不知道要構(gòu)造哪些類(根據(jù)配置文件讀)

Map.Add("A",CreateA());
添加A的前提是你知道有A這個(gè)類了,你在頭文件里面寫了
#include <A.h> 而我的需求是在添加的新類后,不能修改原來的所有代碼

我現(xiàn)在的情況是,工廠只有所有要添加類的基類#include<base.h>
添加的新類要把他自己的指針注冊給工廠的map<int, Base*>
2009-01-11 12:11 | 攀升

# re: 提問: 可以根據(jù)字符串創(chuàng)建類嗎   回復(fù)  更多評論   

C++的反射功能是很弱的,一般而言,都是通過序列化來支持?jǐn)?shù)據(jù)成員的構(gòu)造,如果你還要支持成員函數(shù)(也就是你說的未知類),那就由強(qiáng)類型系統(tǒng)變成了弱類型系統(tǒng)。這個(gè)最好還是結(jié)合一個(gè)成熟的腳本系統(tǒng)來做吧,比如python等。我推薦Qt, 你可以通QtScript來使用JavaScript,配置文件可以通過Json。
2009-01-11 12:35 | eXile

# re: 提問: 可以根據(jù)字符串創(chuàng)建類嗎   回復(fù)  更多評論   

C++無法解決未知的類,除非你想辦法讓他們變成已知。譬如說插個(gè)DLL什么的。

關(guān)于你的問題,singleton也是一種辦法。你要知道,除了main函數(shù)以外,也有很多能夠在初始化的時(shí)候執(zhí)行的代碼的。
2009-01-11 13:09 | 陳梓瀚(vczh)

# re: 提問: 可以根據(jù)字符串創(chuàng)建類嗎   回復(fù)  更多評論   

@eXile
兄弟,你講的這個(gè)太復(fù)雜了,
2009-01-11 13:10 | 攀升

# re: 提問: 可以根據(jù)字符串創(chuàng)建類嗎   回復(fù)  更多評論   

@陳梓瀚(vczh)
我現(xiàn)在的實(shí)現(xiàn)就是把面向構(gòu)件的方法,把每個(gè)擴(kuò)展的類都編譯成.so,通過OpenDLL, 然后調(diào)用構(gòu)造和析構(gòu)函數(shù)
2009-01-11 13:12 | 攀升

# re: 提問: 可以根據(jù)字符串創(chuàng)建類嗎   回復(fù)  更多評論   

@陳梓瀚(vczh)
另外像JAVA的反射機(jī)制+XML就很好實(shí)現(xiàn),但是C++不行
2009-01-11 13:12 | 攀升

# re: 提問: 可以根據(jù)字符串創(chuàng)建類嗎   回復(fù)  更多評論   

@攀升
"我現(xiàn)在的實(shí)現(xiàn)就是把面向構(gòu)件的方法,把每個(gè)擴(kuò)展的類都編譯成.so,通過OpenDLL, 然后調(diào)用構(gòu)造和析構(gòu)函數(shù)"

既然如此,為何不用COM呢?

2009-01-11 14:26 | Jeff Chen

# re: 提問: 可以根據(jù)字符串創(chuàng)建類嗎   回復(fù)  更多評論   

注意,它是.so
2009-01-11 14:59 | 空明流轉(zhuǎn)

# re: 提問: 可以根據(jù)字符串創(chuàng)建類嗎   回復(fù)  更多評論   

@攀升
已經(jīng).so的話,我認(rèn)為在C++里面這樣就足夠好了。反射就別想了,反正是沒有的。你只能繞個(gè)彎子做。
2009-01-11 15:08 | 陳梓瀚(vczh)

# re: 提問: 可以根據(jù)字符串創(chuàng)建類嗎   回復(fù)  更多評論   

我沒看那個(gè)MFC的機(jī)制,
研究過的博友能不能告訴我,那個(gè)方法能不能實(shí)現(xiàn)未知類的new
2009-01-11 21:32 | 攀升

# re: 提問: 可以根據(jù)字符串創(chuàng)建類嗎   回復(fù)  更多評論   

@攀升
當(dāng)然可以。
此前,我試過將其移植到Symbian系統(tǒng)上。
2009-01-12 09:23 | Jeff Chen

# re: 提問: 可以根據(jù)字符串創(chuàng)建類嗎   回復(fù)  更多評論   

編程如禪——工廠模式的智能化實(shí)現(xiàn)(c++)(2)消滅switch/case語句以及由名字創(chuàng)建對象

http://blog.csdn.net/jicao/archive/2006/07/01/861343.aspx
2009-01-12 10:21 | cj

# re: 提問: 可以根據(jù)字符串創(chuàng)建類嗎   回復(fù)  更多評論   

#pragma warning (disable:4786)



#include <iostream>

#include <map>

#include <string>



class Shape;



typedef Shape *(*FactoryFunction)();



class ShapeFactory

{

public:

static void Register(std::string name, FactoryFunction instanceFunction)

{m_FactoryFunctions[name] = instanceFunction;};

static Shape * getInstance(std::string name)

{ if (m_FactoryFunctions.count(name)) return m_FactoryFunctions[name]();

else return NULL; }

private:

static std::map<std::string,FactoryFunction> m_FactoryFunctions;

};



std::map<std::string,FactoryFunction> ShapeFactory::m_FactoryFunctions;



class Shape

{

public:

virtual void Draw() = 0;

};



class Circle : public Shape

{

public:

void Draw() { std::cout << "Drawing a Circle......Done" << std::endl; }

static Shape *createInstance() {return new Circle;}

};



class Triangle : public Shape

{

public:

void Draw() { std::cout << "Drawing a Triagnle......Done" << std::endl; }

static Shape *createInstance() {return new Triangle;}

};



int main()

{

ShapeFactory::Register("circle", & Circle::createInstance);

ShapeFactory::Register("Triangle", & Triangle::createInstance);



Shape * pShape = NULL;



pShape = ShapeFactory::getInstance("circle");

if (NULL == pShape)

{

std::cout << "can't find the product in the factory" << std::endl;

delete pShape;

}

else

{

pShape->Draw();

delete pShape;

}

return 0;

}
2009-01-12 10:24 | cj

# re: 提問: 可以根據(jù)字符串創(chuàng)建類嗎   回復(fù)  更多評論   

用宏應(yīng)該可以的,反正你新加了類,不該原來的代碼,但是總是要重新編譯的哦!

可以用

#define CREATEOBJECT (XXX)

#include <XXX.H>\
XXX CreateObject() \
{ \
return new XXX(); \
} \

這個(gè)影子可以考慮下!
2009-01-13 09:53 | 夢在天涯

# re: 提問: 可以根據(jù)字符串創(chuàng)建類嗎   回復(fù)  更多評論   

MFC就是啦, 不過是用宏替換的方式
2009-01-13 22:43 | 多多

# re: 提問: 可以根據(jù)字符串創(chuàng)建類嗎   回復(fù)  更多評論   

從某個(gè)基類派生的類都可以用其類名的字符串創(chuàng)建.
2009-01-13 22:44 | 多多

# re: 提問: 可以根據(jù)字符串創(chuàng)建類嗎   回復(fù)  更多評論   

我使用的是動(dòng)態(tài)鏈接庫的方法。

可以實(shí)現(xiàn)這個(gè)功能,不是就是每一個(gè)類都需要編譯成一個(gè)單獨(dú)的文件,

顯得比較麻煩!
2009-03-02 15:19 | test

只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美日一区二区在线观看 | 中文日韩电影网站| 一区二区三区国产盗摄| 国产精品s色| 午夜精品视频在线| 女主播福利一区| 日韩视频一区二区三区| 国产精品magnet| 欧美一区二区三区在线| 亚洲成色www8888| 一区二区欧美在线观看| 国产精品sss| 久久久久久亚洲精品中文字幕 | 欧美国产精品va在线观看| 亚洲久久一区二区| 国产精品美女久久久| 久久国产精品久久精品国产| 亚洲国产老妈| 午夜视频在线观看一区二区三区 | 亚洲精品日本| 国产精品美女久久久久久久 | 免费观看不卡av| 亚洲视频在线观看网站| 久久这里只有| 亚洲一区免费| 亚洲国产日韩在线一区模特| 欧美午夜电影在线| 久久噜噜亚洲综合| 一区二区三区成人精品| 欧美 日韩 国产精品免费观看| 一本色道久久加勒比88综合| 国外成人在线| 国产精品国产自产拍高清av| 麻豆久久精品| 欧美一区二区视频免费观看| 亚洲美女免费精品视频在线观看| 久久精品一本久久99精品| 夜夜嗨av一区二区三区| 国内精品视频666| 国产精品豆花视频| 久久综合九色99| 小嫩嫩精品导航| 亚洲桃花岛网站| 亚洲精品美女久久7777777| 久久一二三四| 久久不射网站| 亚洲在线视频| 99精品国产高清一区二区| 韩国三级在线一区| 国产精品午夜国产小视频| 欧美精品18+| 欧美.日韩.国产.一区.二区| 久久精品国产一区二区三区免费看 | 欧美成人精品h版在线观看| 欧美一区二区视频网站| 亚洲图片在线| 亚洲视频电影图片偷拍一区| 最新热久久免费视频| 在线免费观看一区二区三区| 国产三级精品在线不卡| 国产精品视频精品| 国产精品电影在线观看| 欧美日韩一区三区| 欧美日韩免费观看一区| 欧美日韩卡一卡二| 欧美黄色成人网| 欧美成人a视频| 男女av一区三区二区色多| 老司机精品视频网站| 免费观看在线综合色| 欧美wwwwww| 欧美aa国产视频| 欧美成人综合| 欧美巨乳在线| 欧美理论大片| 国产精品豆花视频| 国产精品一二三四| 国产伦精品一区二区| 国产偷国产偷亚洲高清97cao| 国产欧美日韩在线视频| 国产亚洲精品成人av久久ww| 黑人操亚洲美女惩罚| 激情综合激情| 亚洲精品欧洲| 亚洲欧美日韩网| 久久久久久噜噜噜久久久精品| 另类天堂av| 亚洲激情图片小说视频| 一本一本久久a久久精品牛牛影视| 99这里只有久久精品视频| 亚洲亚洲精品在线观看 | 欧美国产日韩一区二区在线观看 | 香蕉久久国产| 欧美一级理论片| 久久久久国产一区二区三区四区| 久久这里只有精品视频首页| 欧美国产1区2区| 欧美午夜激情小视频| 国产日韩欧美二区| 亚洲国产精品高清久久久| 99精品国产热久久91蜜凸| 午夜久久久久| 欧美福利在线| 亚洲一二三区在线观看| 久久久午夜精品| 欧美日韩精品一区二区| 国产日韩精品一区观看| 亚洲人成网站在线观看播放| 亚洲男女毛片无遮挡| 麻豆av一区二区三区| 最新成人av网站| 亚洲欧美一区二区三区久久| 蜜桃av一区| 国产麻豆91精品| 亚洲美女福利视频网站| 久久精品国产99精品国产亚洲性色 | 欧美成人免费小视频| 国产精品免费小视频| 亚洲国内自拍| 欧美主播一区二区三区美女 久久精品人| 美女脱光内衣内裤视频久久影院 | 欧美一区二区三区免费观看| 欧美国产一区二区在线观看| 亚洲伊人久久综合| 免费亚洲一区二区| 国产一区二区日韩精品欧美精品| 日韩视频亚洲视频| 玖玖玖国产精品| 亚洲欧洲av一区二区三区久久| 欧美成人综合| 极品尤物av久久免费看| 午夜精品福利电影| 亚洲欧洲午夜| 美乳少妇欧美精品| 激情五月婷婷综合| 欧美专区中文字幕| 亚洲视频在线播放| 欧美日韩ab片| 日韩视频欧美视频| 欧美国产日韩精品| 久久精品免费播放| 国产一区二区三区电影在线观看| 中文av字幕一区| 亚洲黄色毛片| 欧美成年人网| 亚洲国产精品久久久久久女王| 久久国产精品99久久久久久老狼| 一区二区欧美日韩视频| 欧美日本高清| 99国产精品自拍| 亚洲国产一区二区a毛片| 久久综合久久综合久久| 激情综合网址| 久久久一区二区三区| 欧美一区二区三区视频免费| 国产欧美一区二区三区国产幕精品| 亚洲一区成人| 亚洲午夜91| 国产精品免费网站在线观看| 午夜伦理片一区| 亚洲一区激情| 国产一区视频在线看| 久久嫩草精品久久久精品| 欧美亚洲一区二区在线观看| 国产视频精品xxxx| 久久精品视频导航| 久久久久久久一区二区| 在线欧美电影| 亚洲激情综合| 欧美涩涩视频| 欧美在线不卡| 久久精品视频免费| 亚洲国产成人在线播放| 亚洲黄色在线视频| 国产精品成av人在线视午夜片| 亚洲欧美激情一区二区| 亚洲欧美激情一区二区| 国内外成人在线| 欧美jizz19性欧美| 欧美精选一区| 性感少妇一区| 久久久午夜电影| 亚洲免费电影在线观看| 99xxxx成人网| 国产亚洲aⅴaaaaaa毛片| 免费中文日韩| 欧美日韩在线视频一区| 久久9热精品视频| 久久夜色精品国产亚洲aⅴ| 亚洲精品孕妇| 亚洲欧美日韩精品在线| 在线色欧美三级视频| 亚洲欧洲在线视频| 国产日韩精品一区二区三区| 美女999久久久精品视频| 欧美精品一区二| 久久久精品欧美丰满| 欧美激情网友自拍| 久久国产加勒比精品无码| 久久亚洲视频|