事件处理机制

面向对象事件响应函数如何处理

在这里插入图片描述

实现

事件响应处理类(EvenResponsor)

在这里插入图片描述
分析:

  • EvenResponsor包括行为action,对象actor
  • actor:采用一个空指针类定义一个对象,这个类指针可以接收多个不同的对象,也成为哑指针。
  • action:采用一个指针接收成员函数(行为)。这个成员函数可以返回任何类型,这里定义了一个模板EvenAction
  • friend bool operator ==(const EvenRespoonsor & ihs,const EvenResponsor & rhs):
    • 判断是否响应的对象一致,可以直接访问作比较lhs.actor
    • 判断是否行为一致,使用二级指针的形式(指向类成员函数指针的指针)。由于成员函数指针并不是普通的指针,首先他有一个指针指向类;其次,再有成员函数在类中描述;总的来说,从实现上并不一定是指针,尺寸是有可能变化的。

事件管理

定义

在这里插入图片描述
分析:

  • 使用typedef定义一个响应者矢量EventResponsors,用于存储响应者。
  • 析构函数:迭代器析构所有对象

为什么使用typename关键字

typedef typename std::vector<T>::size_type size_type;

vector::size_type,事实上一共有三种可能:

静态数据成员 静态成员函数 嵌套类型

typedef typename:typedef创建了存在类型的别名,而typename告诉编译器std::vector::size_type是一个类型而不是一个成员。

事件绑定

在这里插入图片描述

解除绑定

在这里插入图片描述

如何使用-触发者

在这里插入图片描述

  • EventDelegator:事件委托者类;’value:新值;tag:附加的参数

触发值变更处理(重要)

在这里插入图片描述

  • it :指向响应者的指针,而非对象。
  • *(it->action):指向类成员函数的指针
  • 如果得到it->actor上的成员函数的指针,使用->*得到
  • 这样(it->actor->* ( * (it->action)) )(value,tag)可调用成员函数

行动者

  • 在触发器上侦听事件,tigger调用绑定函数,将行动者绑定到值变更的事件上。这样将事件写入到事件触发的列表中。
  • 解绑原理同绑定函数
  • 值变更,需要将tag转为指针形式。

在这里插入图片描述

参考:
1、https://blog.youkuaiyun.com/zhangxiao93/article/details/50569924

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值