Есть ли макрос для указателя на функцию? UE4 C

#c #unreal-engine4

#c #unreal-engine4

Вопрос:

Я создал указатель на функцию в ue4 c и не знаю, какой макрос я могу / должен использовать для указателя в файле заголовка. (такие вещи, как UPROPERTY() или UFUNCTION())

почему я вообще хочу использовать макрос? Из-за сборки мусора и, насколько я знаю, gb работает только тогда, когда переменная / функция имеет макрос.

кстати, является ли вызов указателя на функцию таким же производительным, как обычный вызов функции?

код header.h:

 typedef void (AWeaponGun::*FireTypeFunctionPtr)(void);    
FireTypeFunctionPtr PtrFireType;
    
UFUNCTION()
void FireLineTrace();
  

file.cpp Код:

 void AWeaponGun::BeginPlay()
{
    PtrFireType = amp;AWeaponGun::FireLineTrace;
}

void AWeaponGun::Tick(float DeltaTime)
{
    (this->*PtrFireType)();
}
  

Комментарии:

1. Вам не нужно использовать какой-либо макрос с указателем на функцию. Однако, если вам нужен какой-то интеллектуальный указатель на функцию, который может обнуляться при удалении его целевого владельца, тогда вы можете захотеть изучить делегаты (привязка их к uobjects или через общий указатель имеет такое поведение).

Ответ №1:

Функции и ваш указатель на функцию не выделяются и не освобождаются, поэтому вам не нужен сборщик мусора в этом случае, и, следовательно, вам не нужен никакой макрос UE4 (… если вы рассматриваете только сборщик мусора).

Что касается производительности, указатель на функцию, скорее всего, немного менее производителен, поскольку он добавляет еще одну переменную и требует дополнительных инструкций для доступа к функции. Но компилятор мог бы оптимизировать некоторые различия в некоторых случаях. Вам нужно будет проверить ассемблерный код, созданный в обоих случаях, чтобы быть уверенным.