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

攀升·Uranus


Something Different,Something New
數據加載中……

提問: 可以根據字符串創建類嗎


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

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

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

評論

# re: 提問: 可以根據字符串創建類嗎   回復  更多評論   

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

# re: 提問: 可以根據字符串創建類嗎   回復  更多評論   

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

# re: 提問: 可以根據字符串創建類嗎   回復  更多評論   

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

# re: 提問: 可以根據字符串創建類嗎   回復  更多評論   

寫一個編譯器前段,可以給類補充一些代碼。
2009-01-10 19:18 | 空明流轉

# re: 提問: 可以根據字符串創建類嗎   回復  更多評論   

語言本身沒這個機制,正如3樓說的,可以參見mfc的動態創建。。。
2009-01-10 19:45 | dophi

# re: 提問: 可以根據字符串創建類嗎   回復  更多評論   

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

# re: 提問: 可以根據字符串創建類嗎   回復  更多評論   

這個應該不難吧
2009-01-10 20:55 | 5748

# re: 提問: 可以根據字符串創建類嗎   回復  更多評論   

ACDK這個庫可以,不過比較大,使用C++語言按照java語言規范來實現的基礎庫。不過如果走到這一步,大可不比使用C++了。
2009-01-10 20:59 | 萬連文

# re: 提問: 可以根據字符串創建類嗎   回復  更多評論   

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

# re: 提問: 可以根據字符串創建類嗎   回復  更多評論   

自己構造一個object 類 然后作一套繼承的東西。。 可以看看qt的實現。
2009-01-10 23:36 | kong

# re: 提問: 可以根據字符串創建類嗎   回復  更多評論   

最簡單的辦法

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");

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

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

# re: 提問: 可以根據字符串創建類嗎   回復  更多評論   

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

# re: 提問: 可以根據字符串創建類嗎   回復  更多評論   

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

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

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

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

# re: 提問: 可以根據字符串創建類嗎   回復  更多評論   

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

# re: 提問: 可以根據字符串創建類嗎   回復  更多評論   

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

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

# re: 提問: 可以根據字符串創建類嗎   回復  更多評論   

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

# re: 提問: 可以根據字符串創建類嗎   回復  更多評論   

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

# re: 提問: 可以根據字符串創建類嗎   回復  更多評論   

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

# re: 提問: 可以根據字符串創建類嗎   回復  更多評論   

@攀升
"我現在的實現就是把面向構件的方法,把每個擴展的類都編譯成.so,通過OpenDLL, 然后調用構造和析構函數"

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

2009-01-11 14:26 | Jeff Chen

# re: 提問: 可以根據字符串創建類嗎   回復  更多評論   

注意,它是.so
2009-01-11 14:59 | 空明流轉

# re: 提問: 可以根據字符串創建類嗎   回復  更多評論   

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

# re: 提問: 可以根據字符串創建類嗎   回復  更多評論   

我沒看那個MFC的機制,
研究過的博友能不能告訴我,那個方法能不能實現未知類的new
2009-01-11 21:32 | 攀升

# re: 提問: 可以根據字符串創建類嗎   回復  更多評論   

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

# re: 提問: 可以根據字符串創建類嗎   回復  更多評論   

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

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

# re: 提問: 可以根據字符串創建類嗎   回復  更多評論   

#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: 提問: 可以根據字符串創建類嗎   回復  更多評論   

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

可以用

#define CREATEOBJECT (XXX)

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

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

# re: 提問: 可以根據字符串創建類嗎   回復  更多評論   

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

# re: 提問: 可以根據字符串創建類嗎   回復  更多評論   

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

# re: 提問: 可以根據字符串創建類嗎   回復  更多評論   

我使用的是動態鏈接庫的方法。

可以實現這個功能,不是就是每一個類都需要編譯成一個單獨的文件,

顯得比較麻煩!
2009-03-02 15:19 | test
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            美女脱光内衣内裤视频久久网站| 久久国产精品99久久久久久老狼| 欧美国产三级| 久久免费高清视频| 嫩草国产精品入口| 欧美日韩1区2区| 国产精品高潮呻吟久久av无限| 欧美午夜精品理论片a级按摩| 国产精品二区影院| 国产精品一卡二卡| 国产亚洲精品久久久久婷婷瑜伽 | 这里只有精品丝袜| 亚洲免费影院| 噜噜噜在线观看免费视频日韩| 欧美国产国产综合| 国产精品红桃| 在线欧美三区| 亚洲欧美视频一区| 欧美 日韩 国产 一区| 日韩视频免费观看高清在线视频| 亚洲在线成人| 欧美激情中文字幕一区二区| 国产精品一区二区你懂得| 韩国三级电影一区二区| 99国产一区| 久久九九久久九九| 日韩亚洲在线观看| 久久久久成人精品| 国产精品hd| 亚洲国产裸拍裸体视频在线观看乱了中文 | 欧美福利一区二区| 国产一级久久| 亚洲视频每日更新| 欧美大片在线观看一区| 亚洲欧美日韩在线一区| 欧美日韩一区三区| 亚洲精品国产视频| 老司机成人网| 亚洲欧美日韩国产另类专区| 欧美久久精品午夜青青大伊人| 国产日韩欧美三区| 亚洲综合色噜噜狠狠| 亚洲国产精品第一区二区| 亚洲免费影视| 国产精品一区免费在线观看| 一本色道久久综合精品竹菊 | 国产精品一级二级三级| 一本色道综合亚洲| 亚洲国产精品视频| 久久亚洲影音av资源网| 国产亚洲欧美日韩精品| 销魂美女一区二区三区视频在线| 亚洲精品乱码久久久久久黑人| 久久综合电影一区| 一色屋精品视频免费看| 久久三级视频| 久久九九热re6这里有精品| 国产视频一区在线观看| 欧美在线看片a免费观看| 亚洲天堂免费观看| 国产精品青草综合久久久久99| 亚洲婷婷综合色高清在线| 亚洲区国产区| 欧美午夜精品久久久久久久| 中文亚洲欧美| 亚洲系列中文字幕| 国产亚洲激情在线| 久久噜噜噜精品国产亚洲综合| 亚洲主播在线| 好吊视频一区二区三区四区| 久久综合久久综合这里只有精品| 午夜精品影院| 伊人蜜桃色噜噜激情综合| 玖玖综合伊人| 欧美成人精品三级在线观看 | 另类尿喷潮videofree | 一区二区在线观看视频在线观看 | 亚洲第一二三四五区| 女女同性精品视频| 制服丝袜激情欧洲亚洲| 亚洲永久免费精品| 国产一区二区三区久久精品| 亚洲第一福利视频| 欧美午夜寂寞影院| 亚洲深夜福利| 亚洲男同1069视频| 在线欧美日韩国产| 亚洲乱码国产乱码精品精可以看| 欧美网站在线| 久久国产精品99国产精| 久久全国免费视频| 宅男精品视频| 欧美综合77777色婷婷| 亚洲精品久久7777| 亚洲欧美国产高清va在线播| 国产亚洲午夜| 亚洲蜜桃精久久久久久久| 国产精品在线看| 欧美国产免费| 国产女人aaa级久久久级| 欧美黑人在线观看| 国产毛片一区| 亚洲精品中文字幕在线| 国产日韩一区二区三区在线| 欧美韩国日本综合| 国产主播在线一区| 一区二区三区成人精品| 伊人春色精品| 亚洲综合色网站| 999在线观看精品免费不卡网站| 性欧美超级视频| 亚洲午夜精品一区二区| 麻豆精品网站| 久久久久久久久久久久久久一区| 欧美日韩综合不卡| 亚洲国产精品成人va在线观看| 国产综合网站| 午夜免费日韩视频| 销魂美女一区二区三区视频在线| 欧美精品日韩| 亚洲高清毛片| 亚洲人成在线免费观看| 久久久久国产精品一区三寸| 久久国产天堂福利天堂| 国产精品久久久久久久久久免费看| 亚洲国产精品福利| 亚洲国产精品成人| 久久夜色精品国产欧美乱极品| 久久精品夜色噜噜亚洲aⅴ| 国产精品福利网| 亚洲无限av看| 午夜精品视频在线| 国产精品永久免费| 香蕉免费一区二区三区在线观看| 亚洲欧美日韩中文播放| 欧美性做爰猛烈叫床潮| 中文一区在线| 欧美一区1区三区3区公司| 国产精品久久中文| 亚洲视频999| 欧美一区二区三区在线看| 国产精一区二区三区| 亚洲免费中文字幕| 久久久久欧美| 亚洲黄色影院| 欧美日韩免费观看中文| 一区二区三区精品久久久| 这里只有精品丝袜| 国产精品久久网| 国产精品久久久亚洲一区| 母乳一区在线观看| 国产自产女人91一区在线观看| 午夜精品亚洲| 免费成人在线观看视频| 亚洲黄色尤物视频| 欧美日韩专区| 欧美一级视频| 欧美成人精品高清在线播放| 亚洲精品欧美日韩专区| 国产精品成人观看视频免费| 亚洲永久视频| 欧美大片在线观看一区| 亚洲新中文字幕| 国产一区二区三区网站| 免费成人av资源网| 国产精品99久久99久久久二8| 久久精选视频| 99精品视频一区| 国产网站欧美日韩免费精品在线观看| 欧美一区亚洲| 亚洲精品一区二区三区蜜桃久 | 久久免费精品视频| 99在线|亚洲一区二区| 国产精品一区毛片| 欧美成人69av| 香蕉久久精品日日躁夜夜躁| 亚洲电影下载| 久久精品一区二区三区中文字幕| 最新成人在线| 国模 一区 二区 三区| 欧美精品国产精品日韩精品| 亚洲欧美日韩精品久久亚洲区 | 亚洲欧美综合精品久久成人| 好吊一区二区三区| 欧美丝袜第一区| 欧美a级一区| 久久精品亚洲热| 亚洲天堂第二页| 欧美激情国产日韩| 久久久久久久999精品视频| 亚洲一区二区高清| 亚洲欧洲精品成人久久奇米网| 国产欧美日韩亚洲| 欧美午夜不卡在线观看免费| 另类亚洲自拍| 久久天天躁狠狠躁夜夜爽蜜月| 亚洲一级电影| 亚洲美女av电影| 91久久国产综合久久| 老司机久久99久久精品播放免费 |