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

实现
事件响应处理类(EvenResponsor)

分析:
EvenResponsor包括行为action,对象actoractor:采用一个空指针类定义一个对象,这个类指针可以接收多个不同的对象,也成为哑指针。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
2854

被折叠的 条评论
为什么被折叠?



