UE4 Delegate(代理)相关源码分析
前言
- 这是一篇关于UE4代理的一篇分析文章, 但可能涉及C++代理的实现, 请自行百度, 个人也不是很了解
- 这篇文章会使对UE4代理相关的认识更深刻, 然并卵.
核心函数
一堆代理的定义
正文
先说下代理的类型, Engine\Source\Runtime\Core\Public\Delegates\DelegateCombinations.h(即代理宏定义的文件)看起来宏很多, 但实际上只有几种, 其他的是有更多的传入参数
DECLARE_DELEGATE( DelegateName ), 定义一个无参代理
DECLARE_MULTICAST_DELEGATE( DelegateName ) 定义一个无参多播
DECLARE_EVENT( OwningType, EventName ) 定义一个无参事件
DECLARE_DYNAMIC_DELEGATE( DelegateName ) 定义一个动态代理
DECLARE_DYNAMIC_MULTICAST_DELEGATE( DelegateName ) 定义一个动态多播代理
DECLARE_DELEGATE_RetVal( ReturnValueType, DelegateName ) 定义一个代理, 带返回参数
DECLARE_DYNAMIC_DELEGATE_RetVal 定义一个动态代理, 带返回参数
- 凡是可以带返回参数的都不可以多播
- 事件是一种特殊的多播, 虽然几乎用不到
基础内容参考官方文档, 懒得解释
https://docs.unrealengine.com/en-US/Programming/UnrealArchitecture/Delegates
DECLARE_EVENT( OwningType, EventName )
这个东西比较特殊吧, 反正暂时没有用到过,虽然看着定义用处不小的样子, 笑.
事件与 组播委托 十分相似。虽然任意类均可绑定事件,但只有声明事件的类可以调用事件 的 Broadcast、IsBound 和 Clear