又黄又www的网站_青青草.com_在线亚洲美日韩_九九九国产视频_√天堂8资源中文在线_一区二区三区免费网站_久久久久国产一区二区三区_人妻激情偷乱视频一区二区三区_一本到在线视频

計算機二級C技巧:VC實現C++的類的反射機制

發布時間:2011-08-29 共1頁

  前段時間閑時,有時間來看看JAVA的東西,讓我吃驚不小,JAVA 在類的反射機制下開發的不少東西比如STRUTS2,Hibernate等東西是如此的好用,就讓我有點羨慕不已,想在VC下也來實現類似的東西,于是開始在網上查找相關資料,結果都是說C++只提供了RTTI沒有元數據,不能實現。真是讓我比較失望。但是還不甘心,于是就自己動手弄起來,經過兩天的苦心鉆研,現在終于有了一些眉目,找到了解決方法那就是:
  1.自己動手來建立類的各種信息,比如類的函數名稱,函數地址,類的小等等,具體實現如下:
  BEGIN_MAP_CLASS_FACTORY()
  BEGIN_MAP_CLASS(CUser)
  CREATE_ALL_METHOD(CUser, Name)
  CREATE_ALL_METHOD(CUser, Password)
  CREATE_ALL_METHOD(CUser, Rights)
  CREATE_ALL_METHOD(CUser, Day)
  CREATE_COMM_METHOD(CUser, toString, T_NULL)
  END_MAP_CLASS()
  END_MAP_CLASS_FACTORY()
  這個是用來收集類和其成員信息的,這個根據自己的需要,關心什么就收集什么
  沒有辦法,只能手工來寫,C++不提供,所以相對JAVA還是麻煩一點:-(,不過現在已經比較方便了
  如果能寫一個IDE的插件來幫助完成這項工作最好了
  2.有了類的信息還是沒有用的,因為沒有辦法調用,經過一夜的努力,終于寫出來一個通用的函數轉發器,用此轉發器可以調用任意類的函數,和非類的函數。例如:
  INVOKE_METHOD(object, T->Find("SetName"), &std::string("Administrator"));
  3.好了,所有的東西都準備齊全了,讓我們來一起體驗 C++ 的反射機制吧,下面是具體的例子。
  //試例代碼,此代碼在VC6和2005上測試通過。
  // 測試類
  class CUser
  {
  public:
  CUser()
  {
  printf("~CUser 00000000000000 invoked.\n");
  }
  ~CUser()
  {
  printf("~CUser 111111111111111 invoked.\n");
  }
  public:
  std::string toString()
  {
  std::ostringstream o;
  o << "m_Name = " << m_Name.c_str() <<
  "\r\nm_Password = " << m_Password.c_str() <<
  "\r\nm_Rights = 0x" << &m_Rights <<
  "\r\nm_Day = " << m_Day << "\r\n";
  return o.str();
  }
  private:
  PRIVATE_ENTRY(std::string, Name);
  PRIVATE_ENTRY(std::string, Password);
  PRIVATE_ENTRY(std::list<std::string>, Rights);
  PRIVATE_ENTRY(LONG, Day);
  };
  //聲明要收集的類的信息
  BEGIN_MAP_CLASS_FACTORY()
  BEGIN_MAP_CLASS(CUser)
  CREATE_ALL_METHOD(CUser, Name)
  CREATE_ALL_METHOD(CUser, Password)
  CREATE_ALL_METHOD(CUser, Rights)
  CREATE_ALL_METHOD(CUser, Day)
  CREATE_COMM_METHOD(CUser, toString, T_NULL)
  END_MAP_CLASS()
  END_MAP_CLASS_FACTORY()
  static void TestSamples()
  {
  // 初始化映射工廠
  InitializeMappingFactory();
  CLASS_ITER itra = g_class_Factory.Begin();
  printf("%s", g_class_Factory.toString().c_str());
  CClassTemplate *T = FIND_CLASS_MAP("CUser");
  if(T == NULL)
  return;
  // 創建類對象 調用構造函數
  PVOID object = T->Constructor();
  if(object == NULL)
  return;
  printf("invoke CUser constructor.\n");
  std::string t_Result;
  INITIALIZE_INVOKE_MEMORY();
  // 調用Set 和 Get 方法
  INVOKE_METHOD(object, T->Find("SetName"), &std::string("Administrator"));
  INVOKE_METHOD(object, T->Find("GetName"), &t_Result);
  // 調用Set 和 Get 方法
  INVOKE_METHOD(object, T->Find("SetPassword"), &std::string("ld@123456"));
  INVOKE_METHOD(object, T->Find("GetPassword"), &t_Result);
  // 調用Set 和 Get 方法
  LONG t_Day_i = 1000;
  INVOKE_METHOD(object, T->Find("SetDay"), &t_Day_i);
  LONG t_Day_o = (LONG)INVOKE_METHOD(object, T->Find("GetDay"));
  // 調用Set 和 Get 方法
  std::list<std::string> t_List1, t_List2;
  t_List1.push_back("測試1");
  t_List1.push_back("測試2");
  t_List1.push_back("測試3");
  t_List1.push_back("測試4");
  t_List1.push_back("測試5");
  t_List1.push_back("測試6");
  INVOKE_METHOD(object, T->Find("SetRights"), &t_List1);
  INVOKE_METHOD(object, T->Find("GetRights"), &t_List2);
  std::list<std::string>::iterator itrc;
  for(itrc = t_List2.begin(); itrc != t_List2.end(); itrc++)
  {
  printf("%s\n", itrc->c_str());
  }
  printf("%s content\n%s", T->GetName().c_str(), T->toString(object).c_str());
  // 調用 賦值方法
  CUser t_User;
  INVOKE_METHOD(&t_User, T->Find("operator="), object);
  // 調用析構方法 刪除對象
  printf("動態調用析構方法\n");
  T->Destructor(object);
  }
  由于現在代碼還不是很完善,現在只放出測試版請家諒解,等比較完善的時候在放出源碼,共家使用。

百分百考試網 考試寶典

立即免費試用
九九热在线视频播放| 欧美日韩国产高清| 日本黄色的视频| 99re这里只有精品6| 免费人成视频在线| 久久久99久久| 免费福利电影| 成人福利片网站| yy6080午夜| 51ⅴ精品国产91久久久久久| 色综合久久网女同蕾丝边| 欧美一区二区三区在线视频| 中文字幕av久久爽一区| 亚洲色图欧美偷拍| 激情久久综合网| 99国产精品久| 国产又粗又黄又爽| 久久九九热免费视频| 九色福利视频| 久久久综合av| 久久久久性色av无码一区二区| 国产一区二区三区黄视频 | 亚洲一二三专区| 午夜不卡视频| 日本黄色片视频| 久久综合一区二区三区| 欧美卡1卡2卡| av亚洲男人天堂| 一区二区久久久| 黄色影院在线播放| 欧美大黑帍在线播放| 成人免费视频视频在线观看免费 | 欧美中日韩免费视频| 老司机午夜免费精品视频| 中文天堂在线视频| 亚洲综合成人在线视频| 国产一区二区三区不卡免费观看 | 欧美熟乱15p| 呦呦视频在线观看| 精品视频—区二区三区免费| 99久久婷婷这里只有精品| 久久久精品免费视频| 阿v免费在线观看| 国产欧美精品aaaaaa片| 国产精品夜夜夜| 色乱码一区二区三在线看| 成人伊人222| 欧美一区亚洲一区| 亚洲宅男网av| 在线亚洲欧美日韩| 久久综合电影一区| 国产综合久久| xfplay资源站夜色先锋5566| 2022国产精品| 欧美专区在线| 午夜娱乐在线| 日本成人在线不卡| 香蕉伊大人中文在线观看| 91av在线免费观看| 欧美日韩中字| 国产精品av在线| 国产三区视频在线观看| 日本网站免费在线观看| 欧美一级久久| 日日日日人人人夜夜夜2017| 一级黄色片播放| 91久久精品午夜一区二区| 国产视频一二区| 91精产国品一二三产区别沈先生| 欧美韩一区二区| 黄色片中文字幕| 亚洲a一区二区| 8x8x拔插拔插影库永久免费| 精品爽片免费看久久| 欧美人妖在线| free极度另类性欧美| 免费观看久久久4p| 日本三级在线电影| 亚洲午夜精品久久久久久浪潮| 亚洲开心激情| 日本aⅴ在线观看| 国产成人综合一区二区三区| 久久久久久久久一| 日韩在线影视| 波多野结衣网页| 在线观看区一区二| 日韩免费网站| 国产无码精品视频| 91精品国产色综合久久不卡98| 韩日精品视频一区| 国产三级电影在线观看| 欧美性猛交xxxx乱大交hd| 成人性生活视频免费看| xxxx18国产| 精品国产91乱码一区二区三区| 8av国产精品爽爽ⅴa在线观看| 国产69精品久久久久9| 天堂资源在线中文精品| 国内自拍九色| 男人天堂av电影| 久久精品av麻豆的观看方式| 欧美成人免费电影| 亚州福利视频| 亚洲黄色av网址| jizz一区二区| 尤物视频在线观看| 鲁丝一区二区三区| 中文字幕日韩av综合精品| 狠狠色狠狠色综合婷婷tag| 性爱视频日本| 久久出品必属精品| 欧美一区二区三区在线观看视频| 亚洲精品日产| 精品黑人一区二区三区国语馆| 精品成人在线| 亚洲精品字幕在线观看| 亚洲一区精彩视频| 91超碰这里只有精品国产| 亚洲亚洲免费| 国产一级黄色电影| 先锋资源在线视频| 日韩在线一区二区三区免费视频| 欧美黄色一级生活片| 日韩精品一卡| av电影免费看| 国产成人美女视频| 成年无码av片在线| 日本aⅴ亚洲精品中文乱码| 成人图片小说| 国产一级视频在线观看| 国产精品久久久久久久小唯西川 | 久久久久免费| 2018高清国产日本一道国产| 国产一区二区视频在线观看免费| 欧美激情欧美激情| 中文字幕一区二区视频| av蜜臀在线| 欧美黑人性受xxxx喷水| 手机在线看福利| 国内久久久精品| 26uuu欧美| 成人爽a毛片免费啪啪动漫| 国产又黄又爽又色| 久久婷婷国产综合尤物精品| 欧美成人精品福利| 欧美日韩一区自拍| а√在线天堂官网| 国产色综合视频| 欧美成人h版在线观看| 亚洲视频图片小说| 久久不射网站| 97精品国产综合久久久动漫日韩| 亚洲国产aⅴ精品| 久热精品在线观看| 亚洲欧美激情网| 精品久久久久久综合日本| 欧美午夜视频一区二区| 91精品国产成人观看| 最近高清中文在线字幕在线观看| 成人av无码一区二区三区| 国产精品高清无码在线观看| 日韩不卡一二区| 97久久天天综合色天天综合色hd | 国产探花一区| av手机在线观看| 秋霞在线观看av| 亚洲女人18毛片水真多| 精品视频久久久久| 男人天堂网视频| 亚洲精品日韩在线观看| 国产精品成人免费电影| 日韩午夜在线观看| 五月开心六月丁香综合色啪| 91成人短视频在线观看| 日本乱理伦在线| 国产精品久久久久一区二区国产 | 四虎国产精品永久在线国在线| 国产在线中文字幕| 舔足天天操天天射| 亚洲最大最好的私人影剧院| 久久久久久久久久97| 国产精品久久久久久久久久久久午夜片 | 免费黄色的网站| 一色屋成人免费精品网| www天堂在线| av综合在线观看| 五月天婷婷激情| 日韩精品一区二区亚洲av| 国产在线视频二区| 污污污www精品国产网站| www.cao超碰| 91热视频在线观看| 国产小视频免费| 久久久com| 日韩欧美精品一区二区| 日韩少妇中文字幕| 国产精品久久久久久久久久久久冷| 久久国产精品亚洲| 欧美黑人xxxⅹ高潮交| 91豆花精品一区|