UE4之Delegate:组播

定义

#define FUNC_DECLARE_MULTICAST_DELEGATE( MulticastDelegateName, ... ) \
	typedef TMulticastDelegate<__VA_ARGS__> MulticastDelegateName;
	
template <typename... ParamTypes>
class TMulticastDelegate<void, ParamTypes...> : public TBaseMulticastDelegate<void, ParamTypes... >
{
   
private:
	typedef TBaseMulticastDelegate< void, ParamTypes... > Super;
};

多播的功能,基本上基于单播,因为多播只是保存了多个单播而已.
多播实际上是一个TBaseMulticastDelegate的子类, 再来看TBaseMulticastDelegate的定义,只列出部分需要讨论的代码

template <typename... ParamTypes>
class TBaseMulticastDelegate<void, ParamTypes...> : public FMulticastDelegateBase<FWeakObjectPtr>
{
   
	typedef FMulticastDelegateBase<FWeakObjectPtr> Super;

public:
	typedef TBaseDelegate< void, ParamTypes... > FDelegate;
	typedef IBaseDelegateInstance<void (ParamTypes...)> TDelegateInstanceInterface;
	
	template <typename UserClass, typename... VarTypes>
	inline FDelegateHandle AddRaw(UserClass* InUserObject, typename TMemFunPtrType<false, UserClass, void (ParamTypes..., VarTypes...)>::Type InFunc, VarTypes... Vars)
	{
   
		return Add(FDelegate::CreateRaw(InUserObject, InFunc, Vars...));
	}
	
	FDelegateHandle Add(FDelegate&& InNewDelegate)
	{
   
		FDelegateHandle Result;
		if (Super::GetDelegateInstanceProtectedHelper(InNewDelegate))
		{
   
			Result = AddDelegateInstance(MoveTemp(InNewDelegate));
		}
		return Result;
	}
	FDelegateHandle Add(const FDelegate& InNewDelegate)
	{
   
		FDelegateHandle Result;
		if (Super::GetDelegateInstanceProtectedHelper(InNewDelegate))
		{
   
			Result 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值