青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
攀升·Uranus
Something Different,Something New
數(shù)據(jù)加載中……
提問: 可以根據(jù)字符串創(chuàng)建類嗎
語言當然是c++了,大家可能都碰到了,在使用工廠的時候其實還是要在某個地方寫死new A()這樣的代碼,我現(xiàn)在想根據(jù)配置文件或者其它的途徑創(chuàng)建類(類似于JAVA的反射機制);
目標就是,新加入一個類時,我不要改動原來工廠的代碼,程序知道新加的類的名字的字符串(通過讀配置文件)。
各位C++大牛們想像辦法,實在不可能的話,推薦下國外有沒有這種實現(xiàn)的開源項目
謝謝了!
posted on 2009-01-10 17:13
攀升
閱讀(2495)
評論(29)
編輯
收藏
引用
評論
#
re: 提問: 可以根據(jù)字符串創(chuàng)建類嗎
回復
更多評論
C++編譯器的RTTI能力很弱。不過如果夠猛可以寫一個Front專門給各種類加RTTI就好了。
2009-01-10 17:32 |
空明流轉
#
re: 提問: 可以根據(jù)字符串創(chuàng)建類嗎
回復
更多評論
@空明流轉
是的呀,您指的front是什么類?
2009-01-10 17:52 |
攀升
#
re: 提問: 可以根據(jù)字符串創(chuàng)建類嗎
回復
更多評論
純靠語言的能力是不行的,可以參考mfc的CObject實現(xiàn),使用宏來模擬
2009-01-10 18:50 |
飄雪
#
re: 提問: 可以根據(jù)字符串創(chuàng)建類嗎
回復
更多評論
寫一個編譯器前段,可以給類補充一些代碼。
2009-01-10 19:18 |
空明流轉
#
re: 提問: 可以根據(jù)字符串創(chuàng)建類嗎
回復
更多評論
語言本身沒這個機制,正如3樓說的,可以參見mfc的動態(tài)創(chuàng)建。。。
2009-01-10 19:45 |
dophi
#
re: 提問: 可以根據(jù)字符串創(chuàng)建類嗎
回復
更多評論
我寫了一個宏,過會放上來讓大家批判批判
2009-01-10 20:00 |
攀升
#
re: 提問: 可以根據(jù)字符串創(chuàng)建類嗎
回復
更多評論
這個應該不難吧
2009-01-10 20:55 |
5748
#
re: 提問: 可以根據(jù)字符串創(chuàng)建類嗎
回復
更多評論
ACDK這個庫可以,不過比較大,使用C++語言按照java語言規(guī)范來實現(xiàn)的基礎庫。不過如果走到這一步,大可不比使用C++了。
2009-01-10 20:59 |
萬連文
#
re: 提問: 可以根據(jù)字符串創(chuàng)建類嗎
回復
更多評論
Nebula3里的類就有這個特性
http://blog.csdn.net/xoyojank/archive/2008/07/03/2608400.aspx
具體見SDK源碼
2009-01-10 23:21 |
xoyojank
#
re: 提問: 可以根據(jù)字符串創(chuàng)建類嗎
回復
更多評論
自己構造一個object 類 然后作一套繼承的東西。。 可以看看qt的實現(xiàn)。
2009-01-10 23:36 |
kong
#
re: 提問: 可以根據(jù)字符串創(chuàng)建類嗎
回復
更多評論
最簡單的辦法
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");
-------------------------------
如果你熟悉模板的話,可以實現(xiàn)的更漂亮一點。
2009-01-11 00:55 |
陳梓瀚(vczh)
#
re: 提問: 可以根據(jù)字符串創(chuàng)建類嗎
回復
更多評論
贊同3樓和5樓。移植MFC的RTTI并不難。
2009-01-11 09:26 |
Jeff Chen
#
re: 提問: 可以根據(jù)字符串創(chuàng)建類嗎
回復
更多評論
@陳梓瀚(vczh)
這個叫object factory吧,你只能解決已知的類,
問題在于我的工廠也不知道要構造哪些類(根據(jù)配置文件讀)
Map.Add("A",CreateA());
添加A的前提是你知道有A這個類了,你在頭文件里面寫了
#include <A.h> 而我的需求是在添加的新類后,不能修改原來的所有代碼
我現(xiàn)在的情況是,工廠只有所有要添加類的基類#include<base.h>
添加的新類要把他自己的指針注冊給工廠的map<int, Base*>
2009-01-11 12:11 |
攀升
#
re: 提問: 可以根據(jù)字符串創(chuàng)建類嗎
回復
更多評論
C++的反射功能是很弱的,一般而言,都是通過序列化來支持數(shù)據(jù)成員的構造,如果你還要支持成員函數(shù)(也就是你說的未知類),那就由強類型系統(tǒng)變成了弱類型系統(tǒng)。這個最好還是結合一個成熟的腳本系統(tǒng)來做吧,比如python等。我推薦Qt, 你可以通QtScript來使用JavaScript,配置文件可以通過Json。
2009-01-11 12:35 |
eXile
#
re: 提問: 可以根據(jù)字符串創(chuàng)建類嗎
回復
更多評論
C++無法解決未知的類,除非你想辦法讓他們變成已知。譬如說插個DLL什么的。
關于你的問題,singleton也是一種辦法。你要知道,除了main函數(shù)以外,也有很多能夠在初始化的時候執(zhí)行的代碼的。
2009-01-11 13:09 |
陳梓瀚(vczh)
#
re: 提問: 可以根據(jù)字符串創(chuàng)建類嗎
回復
更多評論
@eXile
兄弟,你講的這個太復雜了,
2009-01-11 13:10 |
攀升
#
re: 提問: 可以根據(jù)字符串創(chuàng)建類嗎
回復
更多評論
@陳梓瀚(vczh)
我現(xiàn)在的實現(xiàn)就是把面向構件的方法,把每個擴展的類都編譯成.so,通過OpenDLL, 然后調用構造和析構函數(shù)
2009-01-11 13:12 |
攀升
#
re: 提問: 可以根據(jù)字符串創(chuàng)建類嗎
回復
更多評論
@陳梓瀚(vczh)
另外像JAVA的反射機制+XML就很好實現(xiàn),但是C++不行
2009-01-11 13:12 |
攀升
#
re: 提問: 可以根據(jù)字符串創(chuàng)建類嗎
回復
更多評論
@攀升
"我現(xiàn)在的實現(xiàn)就是把面向構件的方法,把每個擴展的類都編譯成.so,通過OpenDLL, 然后調用構造和析構函數(shù)"
既然如此,為何不用COM呢?
2009-01-11 14:26 |
Jeff Chen
#
re: 提問: 可以根據(jù)字符串創(chuàng)建類嗎
回復
更多評論
注意,它是.so
2009-01-11 14:59 |
空明流轉
#
re: 提問: 可以根據(jù)字符串創(chuàng)建類嗎
回復
更多評論
@攀升
已經(jīng).so的話,我認為在C++里面這樣就足夠好了。反射就別想了,反正是沒有的。你只能繞個彎子做。
2009-01-11 15:08 |
陳梓瀚(vczh)
#
re: 提問: 可以根據(jù)字符串創(chuàng)建類嗎
回復
更多評論
我沒看那個MFC的機制,
研究過的博友能不能告訴我,那個方法能不能實現(xiàn)未知類的new
2009-01-11 21:32 |
攀升
#
re: 提問: 可以根據(jù)字符串創(chuàng)建類嗎
回復
更多評論
@攀升
當然可以。
此前,我試過將其移植到Symbian系統(tǒng)上。
2009-01-12 09:23 |
Jeff Chen
#
re: 提問: 可以根據(jù)字符串創(chuàng)建類嗎
回復
更多評論
編程如禪——工廠模式的智能化實現(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)建類嗎
回復
更多評論
#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)建類嗎
回復
更多評論
用宏應該可以的,反正你新加了類,不該原來的代碼,但是總是要重新編譯的哦!
可以用
#define CREATEOBJECT (XXX)
#include <XXX.H>\
XXX CreateObject() \
{ \
return new XXX(); \
} \
這個影子可以考慮下!
2009-01-13 09:53 |
夢在天涯
#
re: 提問: 可以根據(jù)字符串創(chuàng)建類嗎
回復
更多評論
MFC就是啦, 不過是用宏替換的方式
2009-01-13 22:43 |
多多
#
re: 提問: 可以根據(jù)字符串創(chuàng)建類嗎
回復
更多評論
從某個基類派生的類都可以用其類名的字符串創(chuàng)建.
2009-01-13 22:44 |
多多
#
re: 提問: 可以根據(jù)字符串創(chuàng)建類嗎
回復
更多評論
我使用的是動態(tài)鏈接庫的方法。
可以實現(xiàn)這個功能,不是就是每一個類都需要編譯成一個單獨的文件,
顯得比較麻煩!
2009-03-02 15:19 |
test
刷新評論列表
只有注冊用戶
登錄
后才能發(fā)表評論。
【推薦】100%開源!大型工業(yè)跨平臺軟件C++源碼提供,建模,組態(tài)!
網(wǎng)站導航:
博客園
IT新聞
BlogJava
博問
Chat2DB
管理
Powered by:
C++博客
Copyright © 攀升
導航
C++博客
首頁
新隨筆
聚合
管理
<
2007年10月
>
日
一
二
三
四
五
六
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
隨筆分類
Android(6)
(rss)
C/C++(13)
(rss)
Design pattern(5)
(rss)
Embedded(10)
(rss)
English(6)
(rss)
Entertainment(5)
(rss)
Innovation(1)
(rss)
iOS(13)
(rss)
Linux(25)
(rss)
OO&UML(2)
(rss)
Others(13)
(rss)
Personal(14)
(rss)
Robot(1)
(rss)
Win32/MFC
(rss)
相冊
生活
PASSION團隊
Passion.Chocolly
Passion·Aquarius
Passion·Jawfneo
Passion·Kryptonum
Passion·Liang
Passion·Lislie .net Blog
Passion·Phoenix
Passion·Tiger
圈子
Barry
Steven.Li
Tim.Guo
好同志
最新隨筆
1.?notes
2.?OBJECTIVE C summary
3.?to do list
4.?material
5.?(轉)MongoDB與內存
6.?常用持續(xù)性動詞和非持續(xù)性動詞
7.?【轉】好看的英國電視劇
8.?AI 醫(yī)療 1
9.?去美國準備
10.?長句學習
11.?Microsoft surface
12.?Telepresence
13.?Cancer teatment
14.?(轉)iPhone開發(fā)技巧之環(huán)境篇(7)— 區(qū)分不同版本的iPhone
15.?帶寬與延遲
最新評論
1.?re: Telepresence
這好正在采用Telepresence進行視頻會議的開發(fā),看了你的介紹對Telepresence有了更加具體的了解,謝謝。
--lum
2.?re: (轉)HttpClient基礎
你的httpclient是4.2.X的版本嗎?
--osmond
3.?re: 機經(jīng)
評論內容較長,點擊標題查看
--游客
4.?re: Objective C基本數(shù)據(jù)類型
還有很多
--56games.com
5.?re: Android Framework architecture -- bluez(2)
噢,差點忘了我的郵箱是:corehu@yahoo.cn。
--corehu
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
亚洲五月婷婷
|
欧美一级大片在线免费观看
|
欧美激情精品久久久久久大尺度
|
亚洲第一福利视频
|
国产伦精品一区二区三区视频孕妇
|
久久成人精品无人区
|
亚洲欧美美女
|
久久精品一区四区
|
亚洲丰满在线
|
一本色道久久综合亚洲精品婷婷
|
亚洲午夜精品网
|
久久av一区二区
|
男人的天堂亚洲在线
|
欧美日韩国产123区
|
国产乱人伦精品一区二区
|
国产一区自拍视频
|
99热免费精品
|
久久国产欧美精品
|
欧美激情在线免费观看
|
亚洲国产高清在线
|
亚洲欧美色婷婷
|
美女精品视频一区
|
国产精品欧美日韩
|
亚洲国产欧美一区二区三区久久
|
亚洲精选在线
|
久久九九久久九九
|
99视频有精品
|
久久夜精品va视频免费观看
|
欧美日韩在线综合
|
永久555www成人免费
|
亚洲视频二区
|
欧美激情亚洲自拍
|
亚洲欧美区自拍先锋
|
一区二区三区四区五区视频
|
国产精品老牛
|
亚洲第一网站
|
香蕉久久夜色
|
亚洲精品久久久久久一区二区
|
欧美在线短视频
|
国产精品久久久999
|
亚洲国产精品第一区二区
|
美乳少妇欧美精品
|
亚洲在线观看视频
|
欧美日产一区二区三区在线观看
|
国语自产精品视频在线看一大j8
|
久久高清国产
|
99精品国产一区二区青青牛奶
|
欧美影片第一页
|
国产精品女主播
|
亚洲一区二区黄
|
亚洲免费av观看
|
欧美成人在线免费视频
|
狠狠色丁香婷婷综合久久片
|
午夜在线视频一区二区区别
|
亚洲免费观看
|
欧美片第1页综合
|
亚洲精品日韩久久
|
欧美激情a∨在线视频播放
|
久久久久久久久久久久久久一区
|
国产亚洲福利社区一区
|
午夜国产精品影院在线观看
|
国产欧美亚洲一区
|
香蕉成人久久
|
亚洲无玛一区
|
国产精品黄页免费高清在线观看
|
亚洲视频福利
|
亚洲一区二区成人
|
国产伦精品一区二区
|
欧美一级淫片播放口
|
亚洲综合日韩在线
|
韩日欧美一区二区
|
欧美顶级大胆免费视频
|
欧美精品午夜
|
午夜欧美精品
|
久久精品91久久香蕉加勒比
|
欧美亚洲免费
|
久久久久国产精品厨房
|
国产在线观看精品一区二区三区
|
欧美国产免费
|
在线亚洲精品福利网址导航
|
一本色道婷婷久久欧美
|
国产精品一区一区
|
久久av一区二区三区亚洲
|
99在线精品观看
|
亚洲美女91
|
国产精品影片在线观看
|
久热精品视频
|
欧美精品一区二区三区一线天视频
|
久热精品视频在线免费观看
|
亚洲日本无吗高清不卡
|
99视频在线观看一区三区
|
国产精品亚洲片夜色在线
|
久久精品在线
|
欧美不卡一卡二卡免费版
|
亚洲午夜高清视频
|
久久九九国产精品怡红院
|
亚洲激情视频网站
|
在线亚洲欧美专区二区
|
在线成人小视频
|
亚洲美女区一区
|
激情一区二区三区
|
99国产欧美久久久精品
|
国产一区二区久久久
|
亚洲精品老司机
|
国产一区二区三区免费在线观看
|
91久久久久久久久久久久久
|
国产亚洲一区二区三区在线播放
|
亚洲欧洲日本一区二区三区
|
国产欧美不卡
|
亚洲精品久久久久久久久久久久久
|
一本到高清视频免费精品
|
久久成人免费日本黄色
|
一区二区三区欧美激情
|
久久久久国产精品厨房
|
午夜精品亚洲
|
欧美日韩日本网
|
欧美风情在线观看
|
精品成人a区在线观看
|
亚洲自拍电影
|
亚洲免费人成在线视频观看
|
欧美精品www在线观看
|
免费的成人av
|
国产在线精品二区
|
亚洲欧美成人综合
|
亚洲欧美在线免费观看
|
欧美日韩国产一区精品一区
|
你懂的国产精品永久在线
|
韩日精品视频一区
|
欧美在线观看视频在线
|
欧美在线在线
|
国产日本欧美一区二区三区在线
|
亚洲精品一区二区三区在线观看
|
尤物精品国产第一福利三区
|
久久精品一区二区
|
国产精品久久久对白
|
一区二区三区日韩欧美精品
|
99精品福利视频
|
欧美二区在线播放
|
亚洲区一区二
|
99国产精品
|
亚洲午夜激情
|
欧美日韩极品在线观看一区
|
亚洲国产成人在线
|
一本久久a久久精品亚洲
|
欧美顶级少妇做爰
|
日韩视频二区
|
亚洲性人人天天夜夜摸
|
国产精品福利影院
|
亚洲欧美日韩国产中文在线
|
欧美与黑人午夜性猛交久久久
|
国产日韩精品视频一区
|
久久精品国产视频
|
欧美黑人在线播放
|
aa日韩免费精品视频一
|
欧美三级不卡
|
亚洲欧美视频一区
|
久久青草久久
|
亚洲黄色性网站
|
欧美日韩一区二区欧美激情
|
日韩午夜在线播放
|
亚洲欧美在线高清
|
国模套图日韩精品一区二区
|
老司机亚洲精品
|
99国产精品国产精品久久
|
欧美尤物巨大精品爽
|
亚洲第一区色
|
欧美性淫爽ww久久久久无
|
欧美亚洲日本一区
|
欧美黄色免费网站
|
午夜视频在线观看一区
|
尤物yw午夜国产精品视频明星
|
欧美片在线观看
|
欧美在线视频一区二区
|
亚洲区第一页
|
久久亚洲春色中文字幕久久久
|
亚洲国产精品专区久久
|
欧美日韩在线三区
|
久久天天躁夜夜躁狠狠躁2022
|
亚洲人成网站精品片在线观看
|
校园激情久久
|
亚洲狼人综合
|
国内成+人亚洲
|
国产精品久久久久影院亚瑟
|
久久综合色播五月
|
亚洲在线成人
|
亚洲激情第一页
|
久久成人精品电影
|
亚洲美女区一区
|
樱桃视频在线观看一区
|
国产精品亚洲综合久久
|
欧美日韩国产精品
|
久久资源av
|
亚洲欧美日韩人成在线播放
|
亚洲娇小video精品
|
久久久久久伊人
|
午夜国产精品视频
|
亚洲视频一区
|
亚洲精品午夜精品
|
伊人久久亚洲热
|
国产亚洲欧美日韩精品
|