简单的c++回调函数设计方法(二)
来源:互联网 发布:B2c php 开源 编辑:程序博客网 时间:2024/06/07 16:03
3: stl & boost functor
stl 和 boost functor提供更强大的功能,不过受制于参数个数的限制。
在前面的1,2中方法里面,可以根据自己的需求定义参数的个数,和函数指针或者成员函数的数量,但是无法
直接把gui层中的成员函数进行帮顶和回调,下面介绍一种模板的实现办法
4:手动写模板
在libraray层中:
- template <class T> class IdrawPoint : public CDrawFPoint
- {
- public:
- typedef int (T::*DRAW_POINT)(int x,int y,RGB rgb);
- typedef int (T::*DRAW_LINE)(int sx,int sy,int ex,int ey,RGB rgb);
- typedef int (T::*DRAW_RECT)(int left,int top,int width,int height,bool fill,RGB rgb);
- typedef int (T::*DRAW_STRING)(const char *str,int x,int y,int font,RGB rgb);
- IdrawPoint(T *obj,DRAW_POINT drawPoint,DRAW_LINE drawLine,DRAW_RECT drawRect,DRAW_STRING drawString)
- {
- m_guiObj = obj;
- m_drawPoint = drawPoint;
- m_drawLine = drawLine;
- m_drawRect = drawRect;
- m_drawString = drawString;
- }
- /* 实现纯虚函数*/
- int drawPoint(int x,int y,RGB rgb){
- return (m_guiObj->*m_drawPoint)(x,y,rgb);
- }
- int drawLine(int sx,int sy,int ex,int ey,RGB rgb)
- {
- return (m_guiObj->*m_drawLine)(sx,sy,ex,ey,rgb);
- }
- int drawRect(int left,int top,int width,int height,bool fill,RGB rgb)
- {
- return (m_guiObj->*m_drawRect)(left,top,width,height,fill,rgb);
- }
- int drawString(const char *str,int x,int y,int font,RGB rgb)
- {
- return (m_guiObj->*m_drawString)(str,x,y,font,rgb);
- }
- private:
- T *m_guiObj;
- DRAW_POINT m_drawPoint;
- DRAW_LINE m_drawLine;
- DRAW_RECT m_drawRect;
- DRAW_STRING m_drawString;
- };
- 在library的接口类中定义
- void accept(class CDrawFPoint *fp){m_fp = fp;}
- CDrawFPoint *m_fp;
在gui层中可以在类的成员函数中直接实现CDrawFPoint 的接口而不需要继承此类
- class MyGuiLevel{
- public:
- MyGuiLevel();
- ~MyGuiLevel();
- void init();
- int drawPoint(int x,int y,RGB rgb){/*painter */return 1;}
- int drawLine(int sx,int sy,int ex,int ey,RGB rgb){return 1;}
- int drawRect(int left,int top,int width,int height,bool fill,RGB rgb){return 1;}
- int drawString(const char *str,int x,int y,int font,RGB rgb){return 1;}
- };
- void MyGuiLevel::init()
- {
- /* 此处实例化模板*/
- IdrawPoint<MyGuiLevel> *guiDrawFPoint;
- guiDrawFPoint = new IdrawPoint<MyGuiLevel>(this,&MyGuiLevel::drawPoint,
- &MyGuiLevel::drawLine,
- &MyGuiLevel::drawRect,
- &MyGuiLevel::drawString);
- /* accept(guiDrawFPoint) */
- }
这种设计办法library无需关心gui层的具体任何实现,此处利用了虚拟函数和模板的的办法实现了
将一个成员函数直接注册给底层的办法。
0
上一篇:简单的c++回调函数设计方法(一)
下一篇:c++中map与set容器实例
相关热门文章
- 卫浴产业环保是未来趋势...
- 卫浴产业环保是未来趋势...
- 网站设计:复杂产品的响应式设...
- Android应用之访问servlet服务...
- 牌九透视眼镜 扑克
- test123
- 编写安全代码——小心有符号数...
- 使用openssl api进行加密解密...
- 一段自己打印自己的c程序...
- sql relay的c++接口
- GCC编译命令
- 推荐系统常用算法
- C++Primer笔记 第八章 标准IO...
- c语言中的#号和##号的作用...
- gstreamer插件开发-------sink...
给主人留下些什么吧!~~
评论热议
- 简单的c++回调函数设计方法(二)
- 简单的c++回调函数设计方法
- 简单的c++回调函数设计方法
- 简单的c++回调函数设计方法(一)
- C回调函数的简单实例
- 简单的回调函数
- C语言回调函数一个简单的例子
- C语言回调函数一个简单的例子
- C语言回调函数一个简单的例子
- 什么是回调函数?回调函数的简单实现。
- 二. 回调函数
- 回调函数(二)
- 回调函数的使用(二)
- C++回调函数的设计
- 回调函数的面向对象设计
- 回调函数的简单阐述
- 回调函数的简单例子
- 一个简单的回调函数模型
- Visual Studio 2005 错误集锦
- 链接器工具错误和警告
- 链接器工具警告 LNK4098
- CentOS系统中开启SELINUX
- 简单的c++回调函数设计方法(一)
- 简单的c++回调函数设计方法(二)
- c++中map与set容器实例
- STL中map用法详解
- [c++ Primer中文第三版学习笔记]
- 第八章 域与生命期
- c++中string与int之间相互转换
- vc2005中DLL调用错误分析
- Boost学习之正则表达式--regex
- struct详解
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
库里女友
库里儿子
库里年薪
库里投篮手型
库里投篮手势图解
库里肖夫
应
膈应
知否知否绿肥红瘦
粉丝硬核应援现场
应宝林
应组词
陈情令泰国应援
林宜应寒年全文免费
应雨霖
应接不暇
应寒年林宜
其他应收款
应多音字组词
接力应援阿中哥哥
应纳税所得额
应运而生
江应怜
应收款
林容江应景全文阅读
其他应交款
一应俱全
应知应会
应许你欢喜
怀孕初期应注意
江应景
应和
应和的意思
应和的拼音
应俊
应允
慨然应允
jyj回应允浩撒谎的事情
应力
预应力钢筋
预应力管桩