Как перевести &КЛАСС::МЕТОД в FName?
Для привязки к делегату(delegate) метода(puskCode) - ему требуется передать имя метода в формате текста (FName):
class Simple : public AActor
{
private:
FTimerDelegate delegate;
private:
void BeginPlay()
{
delegate.BindUFunction(this, "puskCode");
}
void puskCode()
{
//реализация
}
}
Возможно ли получить имя этого метода(puskCode) в виде текста(FName) с помощью указания этого метода в формате &КЛАСС::МЕТОД в какой - нибудь функции/макросе?
&Simple::puskCode
Для того что бы не иметь дело с обычным текстом (если я поменяю имя метода или вообще его удалю, то проект будет с написанием имени этого метода в виде строки - успешно компилиться и вылетать при запуске; для того что бы такого не было (что бы ошибка отсутствия переданного метода выявлялась на этапе компиляции) мне и нужно это сделать)
Ответы (2 шт):
Любое обращение к несуществующему методу – уже синтаксическая ошибка, выявляемая при компиляции. А вот текстовое имя как раз может болтаться любое вообще без последствий.
Пишем макрос, который проверят доступность метода и потом возвращает его имя :
# define MethodName( C , M ) ( ( & C :: M ) ? ( # M ) : "" )
MethodName ( Simple , puskCode ) вернёт строку "puskCode" если этот метод существует и будут права доступа к нему.