当前位置: 首页 > news >正文

官方网站建设专家磐石网络北京旅游网页设计

官方网站建设专家磐石网络,北京旅游网页设计,洛阳网站设计公司,工程建设监理规定前篇文章解决了关于函数指针的不同类成员函数传递的问题。不知道细心的朋友看见我上篇文章后#xff0c;是否发现参数必须被限制为特定的参数。 原来改进的代码如下#xff1a; class CCallFuctionList { public:CCallFuctionList(); virtual ~CCallFuctionL…前篇文章解决了关于函数指针的不同类成员函数传递的问题。不知道细心的朋友看见我上篇文章后是否发现参数必须被限制为特定的参数。 原来改进的代码如下 class CCallFuctionList { public: CCallFuctionList(); virtual ~CCallFuctionList(void); typedef boost::functionvoid() FUNCPTR; typedef std::multimapunsigned int, FUNCPTR FUNCMAP; typedef std::multimapunsigned int, FUNCPTR::iterator FUNCMAP_ITERATOR; void CallDoRegister(); private: FUNCMAP_ITERATOR m_funcIter; int i; FUNCMAP m_funcMap; }; 以FUNCPTR作为参数能传递的函数形式只能为void xxx(void)这种类型的。 例如#define REGISTE_FUNC(type, func) m_FuncMap.insert(std::make_pair(type, func))  REGISTE_FUNC(SCMD_REGISTER,   boost::bind(CCallFuctionList::CallDoRegister, this));  即既FUNCPTR参数只能接受void CallDoRegister()这种类似的类成员函数 那么有没有办法可以解决不同参数类型的函数成员呢答案当然是有。 我们可以模仿MFC里面的回调函数做法。具体修改如下 enum { voidFunV, intFunV, intunI }FuncType; union pFunc { boost::functionvoid() pVoidFunV; boost::functionint() pIntFunV; boost::functionint(int) pVoidFunI; }; class CCallFuctionList { public: #define REGISTE_FUNC(type, func) m_FuncMap.insert(std::make_pair(type, func)) CCallFuctionList(); virtual ~CCallFuctionList(void); typedef boost::functionvoid() FUNCPTR; typedef std::mapunsigned int, pFunc FUNCMAP; typedef std::mapunsigned int, pFunc::iterator FUNCMAP_ITERATOR; void CallDoRegister(); void InsertMapFunc(int ID, FUNCPTR f); void Run(int ID, FuncType fType); private: FUNCMAP_ITERATOR m_funcIter; int i; FUNCMAP m_funcMap; FuncType m_FuncType; pFunc m_pFunc; }; void CCallFuctionList::InsertMapFunc(int ID, FUNCPTR f) { m_pFunc.pVoidFunV f; REGISTE_FUNC(ID, m_pFunc); } void CCallFuctionList::Run(int ID, FuncType fType, int a 0); { m_pFunc m_funcMap[ID]; switch(fType) { case voidFunV: (this-*m_pFunc.pVoidFunV)(void); break; case intFunV: (this-*m_pFunc.pIntFunV)(void); break; case intFunI: (this-*m_pFunc.pVoidFunI)(a); break; } } 具体调用如下 class A { public: A() { m_funcList.InsertMapFunc(SCMD_REGISTER, (CCallFuctionList::FUNCPTR)boost::bind(A::Insert, this)); m_funcList.InsertMapFunc(SCMD_LOGIN, (CCallFuctionList::FUNCPTR)boost::bind(A::InsertA, this)); } void Run() { m_funcList.Run(SCMD_REGISTER, intFunI, 5); m_funcList.Run(SCMD_LOGIN, intFunv); } private: int Insert(int); int InsertA(); private: CCallFuctionList m_funcList; } 通过两张表一张参数类型表一张函数指针表来实现参数与函数指针的对应。MFC具有借鉴意义。 当然不排除有更好的方法如果有更好的办法欢迎指教
http://www.pierceye.com/news/598489/

相关文章:

  • 中山网站建设公司专业建站公司设计
  • 汽车手机网站制作一个具体网站的seo优化
  • 手机网站的页面大小wordpress下载主题博客
  • 创客贴设计网站官网高端网站制作网址
  • 衡水网站建设选哪家信用网站系统建设方案
  • 网站全屏代码如何做网站外链
  • 中国人自己的空间站哪里有免费的网站模板下载 迅雷下载 迅雷下载软件
  • 网站建设預算网站的新闻模块怎么做
  • 浙江省建设厅查询官方网站外贸业务员
  • 乐清公司网站建设高端网站有哪些
  • 网站备案状态查询漳州北京网站建设
  • wordpress oss ftp湖北百度seo排名
  • 深圳福田站弹簧机东莞网站建设
  • 网站美工要求企业建设网站风险
  • 网站建设项目资金申请报告semen
  • 阿里巴巴上做网站要多少钱信息网络工程师
  • 网站建设与网页设计心得体会淘宝网页制作素材
  • 男女做床网站装酷网装修平台
  • 网站引导页动画华为网站哪个公司做的
  • 网站开发用了哪些技术上海建设网站制作
  • 惠州微网站建设胶州家园网站建设
  • 建设配资网站有要求吗网站的内部链接如何做
  • 济南专业做公司网站的机构评价一个网站的优缺点
  • 广东省石油化工建设集团公司网站炫酷个人网站
  • 石家庄模板建站代理什么网站可以自己做字
  • 公司想做个网站应该怎么做河南郑州网站设计公司
  • 建电影网站赚钱挣钱吗网站互动功能
  • 流浪动物网站开发巴中手机网站建设
  • 吕梁网站建设kuyiso手机网站建设 jz.woonl
  • 电脑和手机都能浏览的网站开发设计学类包括哪些专业