DELCEAR_DYNAMIC
时间: 2023-12-16 07:04:46 浏览: 106
`DECLARE_DYNAMIC_MULTICAST_DELEGATE`是一个宏定义,用于声明一个动态的多播代理。它是用于在UE4中创建事件委托的一种方式。该宏定义的语法如下:
```c++
DECLARE_DYNAMIC_MULTICAST_DELEGATE(DelegateName);
```
其中,DelegateName是你想要创建的事件委托的名称。使用该宏定义创建的事件委托可以在运行时动态地绑定和解绑函数,从而实现事件的多播。
`DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam`是`DECLARE_DYNAMIC_MULTICAST_DELEGATE`的一个变体,它允许你在事件委托中传递一个参数。其语法如下:
```c++
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(DelegateName, ParamType, ParamName);
```
其中,DelegateName是你想要创建的事件委托的名称,ParamType是你想要传递的参数的类型,ParamName是你想要传递的参数的名称。
下面是一个使用`DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam`创建事件委托的示例代码:
```c++
// Delcear delegate
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FTimerHandleDelegate, FTimerHandle, TimerHandle);
class MyClass
{
public:
MyClass()
{
UE_LOG(LogTemp, Warning, TEXT("MyClass created"));
}
~MyClass()
{
UE_LOG(LogTemp, Warning, TEXT("MyClass destroyed"));
}
void MyFunction(FTimerHandle TimerHandle)
{
UE_LOG(LogTemp, Warning, TEXT("MyFunction called with TimerHandle %d"), TimerHandle.GetHandle());
}
};
int main()
{
// Create an instance of MyClass
MyClass* Obj = new MyClass();
// Create a dynamic multicast delegate
FTimerHandleDelegate MyDelegate;
// Bind a function to the delegate
MyDelegate.AddDynamic(Obj, &MyClass::MyFunction);
// Call the delegate
FTimerHandle TimerHandle;
MyDelegate.Broadcast(TimerHandle);
// Unbind the function from the delegate
MyDelegate.RemoveDynamic(Obj, &MyClass::MyFunction);
// Destroy the instance of MyClass
delete Obj;
return 0;
}
```
该示例代码中,我们首先使用`DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam`宏定义创建了一个名为`FTimerHandleDelegate`的事件委托,该事件委托可以传递一个名为`TimerHandle`的`FTimerHandle`类型的参数。然后,我们创建了一个`MyClass`类的实例,并将其绑定到了`MyFunction`函数上。最后,我们调用了该事件委托,并在输出日志中观察到了该函数被调用的信息。
阅读全文