委托、信号和消息反馈的模板实现技术

憋了很长一段时间的想法,在这里说说,希望听听诸位高手的意见。

我写过不少C++程序(当然比起高手还是差远了),写过库也写过客户程序。一般库都会提供一些好用的类供客户程序使用,不少库还可以让客户程序响应库内的某些事件。比如MFC/ATL/VCL提供消息响应,很多ActiveX提供自定义消息响应,甚至是系统底层的中断调用都可以列入这个范畴。然而,正是以上这些“反向”的调用让我觉得很烦恼。

1 继承+多态

乍一看是理所当然的选择,库中的类把响应处理函数设置为虚函数,客户程序可以继承这个类并且重载响应函数。以某个Socket类为例,可以提供一个OnRecv函数用来响应网络数据包到达的处理。客户程序只需要重载OnRecv并进行自己的处理就可以了。

struct Socket { // base class
 virtual void OnRecv();
};
stuct MySocket { // your event-handle class
 virtual void OnRecv() { /* do sth here ... */ }
}


疑问:很多时候这样做实在很烦,特别是做小程序的时候,或者需要快速做原型的时候,一眼望去小小的程序一上来就继承了一大堆东西,颇为不爽。只是想着能省事一点,希望能像那些脚本语言一样快速绑定消息响应,而不是以继承开始工作——我已经害怕看到长长的类继承树了,很多时候根本不必要继承整个类;又或者某些类只提供一个接口而不是具体的类又或者需要多重继承,处理都有一定麻烦;最麻烦的莫过于有时候需要改变响应处理,难道继承好几个下来么——这么多虚表也是浪费啊。

wangtianxing老大点评:为了使用Socket就必须继承Socket,这可以说是Socket的设计的问题。如果需要实现类似的功能的话,可以写成如下,虽然和继承 Socket 没有多少本质的差别,不过确实把消息处理类和Socket的实现扯开了。:

时间: 2024-09-08 01:48:17

委托、信号和消息反馈的模板实现技术的相关文章

ASP.NET模板引擎技术

以前听我朋友说起php的模板引擎技术的时候似懂非懂哪时感觉真的很强,一直在想asp.net有这种技术吗?我不知道我的理解是不是对的.其实 asp.net的模板引擎技术就是先建好一个静态的html页面我们称它为模板页,你如果有不同形式的页面哪就得建立不同的静态模板页,然后在后台用文件操作往这个文件里写东西然后在把这个模板页另存到一个静态页面的目录,不好意思可能我的理解太俗,如果有更好的理解和想法可以在apolov发文章告诉我谢谢.现在我附加一下代码 Default.aspx这个页面只有几个text

pushlet-请教各位大牛,一个消息推送平台的技术选型

问题描述 请教各位大牛,一个消息推送平台的技术选型 请教各位大牛,一个消息推送平台的技术选型. 现在想做一个由各个应用(假设名字为A系统.B系统.C系统,都是独立的java Web系统)共用的消息推送平台,把各个系统中的消息通知推送到A.B.C系统的用户端.A.B.C系统用户可能使用浏览器登录,也可能使用Android手机登录. 现在已知消息推送数不会特别高,同时的在线用户数比较有限. 请问该使用哪种技术作为消息推送? 是选择openfire这样的XMPP(BOSH)服务器,还是直接用java的

3dmax插件 下载 模板-请教技术大牛们一个关于3dmax二次开发的问题

问题描述 请教技术大牛们一个关于3dmax二次开发的问题 做一个3dmax的插件,将浏览器中的超链接拖动到3dmax中(其中包括鼠标的点击.拖动.按下),然后3dmax会自动把链接中的内容(已经做好的模型.图片.位图)下载下来,将这些内容作为模板加载到3dmax中.请问实现这样的功能流程是什么?怎么去入手呢?可行性是怎样的? 解决方案 参考:http://docs.autodesk.com/3DSMAX/15/ENU/3ds-Max-SDK-Programmer-Guide/index.html

用电线来传网络信号的黑科技?详谈AirGig技术

在已经结束的MWC 2017大会上,人们讨论了作为4G后继者的5G.照理说5G相对4G当然能够带来更好的网络体验,但问题在于它作为一个业界的技术标准,根本还不存在.没有人知道5G是什么,更别提怎么实现,什么时候到来了. 正因为如此,AT&T的工程师们提出了另外一种技术,旨在带来更高速的宽带,更强的信号质量,甚至能够遍及那些网络欠发达的区域.不需要专门的线路或信号站,可以支持几乎无处不在的超快Wi-Fi,这就是AirGig.那么,AirGig到底是什么? 有一种说法认为AirGig是一种"

JAVA Web实时消息后台服务器推送技术---GoEasy_javascript技巧

越来越多的项目需要用到实时消息的推送与接收,我这里推荐大家使用GoEasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送! 浏览器兼容性:GoEasy推送 支持websocket 和polling两种连接方式,从而可以支持IE6及其以上的所有版本,同时还支持其它浏览器诸如Firefox, Chrome, Safari等等. 支持不同的开发语言:GoEasy推送 提供了Restful API接口,无论你的后台程序用的是哪种语言都可以通过Restful API来实现后台实时推送.

php模板引擎技术简单实现_php实例

用了smarty,tp过后,也想了解了解其模板技术是怎么实现,于是写一个简单的模板类,大致就是读取模板文件->替换模板文件的内容->保存或者静态化  tpl.class.php主要解析 assign 方法实现      /** * 模板赋值操作 * @param mixed $tpl_var 如果是字符串,就作为数组索引,如果是数组,就循环赋值 * @param mixed $tpl_value 当$tpl_var为string时的值,默认为 null */ public function a

仿函数、绑定、桥接、委托相关讨论

仿函数.绑定.桥接.委托相关讨论: 以下随便讨论下,没突出的中心论点,个中理论只代表我个人观点,难免有错:),欢迎指正. 一.需求: 在事件处理常常会碰到这样的情况: 1.接口分离.即invokers(调用者)与(receivers)接收者分离. 2.时间分离. 比如说:UI相关元素(按钮.菜单等)就是一个invokers. receivers则是响应命令的对象(如对话框或应用程序本身). 这需要我们要先将UI相关元素的事件响应的接收者在初始化时先保存起来. 待后用户按下按钮等再触发(即invo

PHP微信开发之模板消息回复_php实例

微信公众平台上,有个模板消息回复接口:可以用来实现回复特定的消息-----比如用户下了订单之后,回复给用户您的订单正在处理中...比如下面这张图: 用户进行了一些操作之后,服务号能够返回特定的消息----这就是模板消息. 要实现模板消息的回复,你的公众号必须是经过微信认证的,如果是个人的订阅号,暂时不支持微信认证.不过也不影响做测试-----你可以使用测试公众号: 使用测试号的时候,接口信息的配置就不讲了,可以参考我之前的博客. 使用维码登录测试号之后,需要用你的微信号去关注这个测试号,不然看不

C#开发微信门户及应用(27)-公众号模板消息管理

原文:C#开发微信门户及应用(27)-公众号模板消息管理 通过模板消息接口,公众号能向关注其账号的用户发送预设模板的消息.模板消息仅用于公众号向用户发送重要的服务通知,只能用于符合其要求的服务场景中,如信用卡刷卡通知,商品购买成功通知等.不支持广告等营销类消息以及其它所有可能对用户造成骚扰的消息.本文主要介绍基于C#开发实现公众号模板消息的管理功能. "模板消息功能的推出,将极大地增强服务号的服务通知能力",在一些一直期待微信模板消息功能开放的公众号运营者看来,微信一对一沟通的社交属性