定义
#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