C++ 事件系统使用手册
C++ 事件系统使用手册概述本手册提供了 C++ 事件系统的使用指南。事件系统允许对象订阅和接收特定类型的事件通知,从而实现对象之间的解耦。本系统基于 EventManager模块、GameEvent模块 Delegate 模块,支持使用 lambda 表达式来封装事件处理函数。
环境配置在使用事件系统之前,请确保以下依赖库已正确配置:
EventManager.h: 事件管理器头文件,包含事件注册、发送和注销等功能。
iostream: 输入输出流库,用于示例中的打印操作。
基本概念
事件 (Event): 代表发生的事情,可以被订阅和触发。
委托 (Delegate): 用于封装事件处理函数,可以是 lambda 表达式、函数指针或函数对象。
使用步骤1. 定义事件处理函数事件处理函数应该接受一个事件对象作为参数,并执行相应的操作。
1234void Func(MyEvent* a){ std::cout << "TEST1" << a->message << std::endl;}
2 ...
游戏事件池实现解释文档
游戏事件池实现解释文档概述本文件提供了一个基于对象池的游戏事件池的实现。它包括一个模板类 GameEventPool 用于管理事件对象,以及一个抽象基类 GameEventBase 和一个模板类 GameEvent 用于定义和创建具体的游戏事件。
头文件123#include <stack>#include <unordered_set>#include <string>
<stack>: 提供了栈数据结构,用于存储事件对象。
<unordered_set>: 提供了哈希集合数据结构,用于快速查找和确保对象唯一性。
<string>: 提供了字符串类,用于存储事件信息。
GameEventPool 类模板成员函数Push(T* item)
将一个事件对象推入池中。如果对象已存在,则不重复添加。
Get()
从池中获取一个事件对象。如果池为空,则创建一个新的对象实例。
私有成员函数Init(T* item)
初始化事件对象。
静态成员变量
_pool: 存储事件对象的栈。
_poolSet: 存储事件对象 ...
EventManager 和 EventCallbackList 类解释文档
EventManager 和 EventCallbackList 类解释文档概述该文档描述了 EventManager 和 EventCallbackList 类,它们共同构成了一个游戏事件的分级广播管理系统。该系统允许注册、注销和触发事件,每个事件可以有不同的优先级。
头文件12345#include <vector>#include <functional>#include <unordered_map>#include "GameEvent.h"#include "Delegate.h"
<vector>: 用于存储回调列表。
<functional>: 提供了 std::function。
<unordered_map>: 用于快速查找事件信息。
"GameEvent.h": 包含游戏事件基类定义。
"Delegate.h": 包含委托类定义。
常量定义1const int MAX_PRIORITY_COUNT = 11; ...
Delegate 类模板解释文档
Delegate 类模板解释文档概述Delegate 类模板是一个单播委托类,它封装了 C++ 的可变参数模板和 std::function,用于存储和调用具有任意数量参数的方法,但仅支持返回值为 void 类型的方法。委托类可以看作是函数指针的一个更灵活的替代品,它允许存储和调用任何可调用的目标(如函数、lambda 表达式、函数对象等)。
头文件12#include <functional>#include <stdexcept>
<functional>: 提供了 std::function,用于封装函数对象。
<stdexcept>: 提供了标准异常类,如 std::runtime_error。
类定义成员类型别名1using FunctionType = std::function<void(Args...)>;
FunctionType: 类型别名,用于表示可以接受任意数量参数并返回 void 的函数类型。
构造函数123Delegate(int hashCode);Delegate();Delegat ...
C++知识点
1.右值引用C++11后对拷贝构造函数的优化,允许窃取一个类中的所有内容,通俗来讲是讲整个类对象的内容搬空, 代码示例:
2.类的构造函数执行顺序虚基类,父类,成员对象,自己,父类的是按照继承的顺序进行进行调用,跟在构造器中的构造顺序无关,虚基类的构造是依照该类继承的父类中最深的虚基类进行构造,深是相对于最终的派生类来讲的,最终的派生类是浅。
3,类大小一个空的类对象大小是1B
一个类相当于一个数据结构,有内存对齐的效果,有小于4四节的里面的所有内容朝着4字节对齐,大于4字节则是自动补齐的8字节
一个string的大小是40B