UE4 Delegate
BindXXX函数
CreateXXX函数
调用CreateCopy函数
GetDelegateInstanceProtected函数
从内存中返回委托的实例对象。
使用成员变量DelegateAllocator的GetAllocation()方法
Allocate成员函数
使用成员变量DelegateAllocator的ResizeAllocation方法分配内存
重载的new操作符
将传入的FDelegateBase参数,调用它的Allocate函数。
IDelegateInstance
里面包含了多个通用的接口函数
如GetUObject,GetHandle
(都是纯虚函数)
IBaseDelegateInstanceCommon
进一步声明了CreateCopy和Excute接口
IBaseDelegateInstance
进一步新增了ExecuteIfSafe接口
TCommonDelegateInstanceState
新增了成员变量:Payload和DelegateHandle
TBaseUFunctionDelegateInstance
TBaseSPMethodDelegateInstance
TBaseRawMethodDelegateInstance
TBaseUObjectMethodDelegateInstance
TBaseStaticDelegateInstance
TBaseFunctorDelegateInstance
TWeakBaseFunctorDelegateInstance
FDelegateHandle
委托的句柄
可以近似地看作委托的智能指针
派生出的这些TXXXDelegateInstance类,都实现了IBaseDelegateInstanceCommon里提供的接口。此外也分别为自身实现了Create函数。
CreateCopy函数
Execute函数
TDelegate
TDelegateBase
TDelegate/TDelegateBase
持有暴露给用户的顶层接口
如CreateXXX,BindXXX,ExecuteIfBound等。
IDelegateInstance
由其派生出不同类型的子类
以实现绑定不同类型委托的需求
意思就是:蓝图函数,全局Static函数,成员函数,匿名函数,它们的绑定方法和执行方法都不太一样。
FDelegateBase
持有Allocate和GetDelegateInstanceProtected这样的底层接口,无论是Create还是Bind,最终还是要用到这些底层接口。
第三步
第四步
第七步
该思维导图来源:知乎 DarkFlameMaster
https://www.zhihu.com/people/xian-sui-bian-qi-ge-ming-hao-liao/posts