DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam、tmap、传递参数
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam并不是用来直接传递TMap类型参数的,它只能用来声明具有一个参数的动态多播代理,参数类型可以是基本数据类型或自定义的结构体。
如果需要在代理中传递TMap类型的参数,可以考虑将TMap封装成一个自定义结构体,然后将该结构体作为参数传递给代理。以下是一个示例代码:
USTRUCT(BlueprintType) struct FMapWrapper { GENERATED_USTRUCT_BODY() UPROPERTY(BlueprintReadOnly) TMap<int32, FTraffic> FTrafficMap; }; // 声明一个代理,其参数类型为FMapWrapper结构体 DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FNotifyGenerateTrail,const FMapWrapper&, Traffics);
在上述示例代码中,我们定义了一个名为 FMapWrapper 的结构体,用于封装TMap类型的参数。在 MyClass 类中声明了一个名为OnNotifyGenerateTrail的FNotifyGenerateTrail代理,其参数类型为 FMapWrapper。在 NotifyGenerateTrail函数中,并将其作为参数传递给代理的 Broadcast 函数。
UPROPERTY() FNotifyGenerateTrail OnNotifyGenerateTrail
FORCEINLINE void NotifyGenerateTrail(const FMapWrapper& TrafficDataPerSecond) { if (OnNotifyGenerateTrail.IsBound()) { OnNotifyGenerateTrail.Broadcast(TrafficDataPerSecond); } }
在绑定OnNotifyGenerateTrail后,回调函数中可以对TMap进行相应的处理。需要注意的是,在UE4中使用代理时,必须使用 DECLARE_DYNAMIC_MULTICAST_DELEGATE 或 DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam等 宏来声明动态多播代理,因为这两个宏会自动生成一些必要的代码。同时,在类中声明的代理对象必须是 UPROPERTY() 宏定义的成员变量,这样才能在蓝图中使用。