<2021SC@SDUSC> 开源游戏引擎 Overload 代码模块分析 之 OvTools(一)—— Eventing(包含 OvTools 模块的概述)

2021SC@SDUSC
开源游戏引擎 Overload 代码模块分析 之 OvTools(一)—— Eventing(包含 OvTools 模块的概述)

前言

从本文开始,笔者将系列化地对 Overload 中 OvTools (工具模块)进行分析。若想先大致了解该引擎各个大模块,可前往笔者上一篇相关文章查看。

现在,让我们先了解 OvTools 的大纲吧:

OvTools 工具模块概述

这是 OvTools 包含的文件夹:
ovtools list
可以观察到,它包括了四个相对独立的小模块:Eventing、Filesystem、Time、Utils,也展示了 OvTools 的功能:事件、文件系统、时间系统及其余多种工具(例如随机数生成、系统调用等)的集合。

接下来,我们先解析其中的 Eventing 事件模块,采用文件顺序分析的方式,能更好地理解作者编码的思路;其他模块将在后续文章中探究。(PS:OvTools 的引用与外部依赖项多是所需的 std 库等等的文件,笔者将不多赘述。)

分析

1、Eventing 模块概述

该模块的功能如其名,包含一组有关回调的函数事件,负责处理各种回调。它包括了下列文件:
Eventing列表
替不熟悉编译文件的读者解释一下,其中 .inl 文件是内联函数定义文件。为了避免 .h 文件过长等,我们会将所有的内联函数定义移入该文件,然后再用 #include 指令包含到类声明后面(该引擎是放在类头文件底部);所以命名上,也多与头文件相同。

2、Event.h

2.1 头文件

我们先看该模块包括的头文件(仅有一个):

#include <functional>

这是 C++ 标准库中的一个头文件,定义了 C++ 标准中多个可用于表示函数对象的类模板,包括基础算法(除法、乘法等)、逻辑算法(and、or等)等等。其中,类的实例可以直接当作函数调用。

2.2 Event 类

该小模块的主体是 Event 类,该类是包含在 namespace OvTools::Eventing 命名空间下的。顺便在此一提,在 OvTools 所有的小模块中,所有的主体代码都是在各自模块的命名空间下写的,所以笔者此后将不再列出命名空间的代码了。

现在来看 Event 类,不过在类的定义之前:

namespace OvTools::Eventing
{
   
	/**
	* The ID of a listener (Registered callback).
	* This value is needed to remove a listener from an event
	*/
	using ListenerID = uint64_t;

	/**
	* A simple event that contains a set of function callbacks. These functions will be called on invoke
	*/
	template<class... ArgTypes>
	class Event
	{
   

代码作了一个重命名,将 uint64_t 类型重写为监听器的 ID,使得该类型的声明在该命名空间中更为直观;代码还作了参数模板,允许按需求分配参数个数(C++ 的 … 代表参数个数自定义)。

而关于 Event 类,都是各种函数的声明,且作者非常贴心地做了注释,代码如下:


                
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值