使用委托的原因:
1.无需实时检测,触发式逻辑。
2.解耦类。
单播:
1.定义一个委托。
DECLARE_DELEGATE_TwoParams(FSingleDelegateWithTwoParams, FString,int32);
//创建2个参数单播委托对象
FSingleDelegateWithTwoParams SDTwoParams;
2.需要委托的对象
class CallbackTarget
{
public:
//2参单播委托回调函数
void SDTwoParamsCallback(FString var1,int32 var2);
}
3.委托
CallbackTarget* Target=new CallbackTarget();
//2参单播对象绑定回调函数
SDTwoParams.BindUObject(Target,&CallbackTarget::SDTwoParamsCallback);
4.回调
//单播有参委托触发回调
SDTwoParams.ExecuteIfBound("test single delegate",“5”)
5.解绑
SDOneParam.Unbind();
6. 总结:
假如有2个类,类CallbackTarget和类A,
委托的时候,相当于把类CallbackTarget的对象Target和函数指针SDTwoParamsCallback存起来。
即:
SDTwoParams.BindUObject(Target,&CallbackTarget::SDTwoParamsCallback);
类A中,如果达到某个条件,需要调用类CallbackTarget的函数SDTwoParamsCallback,则调用Target->SDTwoParamsCallback()即:
SDTwoParams.ExecuteIfBound("test single delegate",“5”)
类A并非直接调用Target->SDTwoParamsCallback(),因为类A和类CallbackTarget不相关,类A没有必要保存CallbackTarget的对象。
但是类A和类CallbackTarget都知道SDTwoParamsCallback的对象,所以是通过第三者SDTwoParamsCallback来交流的。
在类A的某个地方调用SDTwoParams.ExecuteIfBound("test single delegate",“5”),本质上就是在调用类CallbackTarget的SDTwoParamsCallback函数。
引用: