Хочу создать ссылку на функцию так как очень длинная цепочка вызова каждый раз.
typedef void(*PlayerVP)(FVector&, FRotator&);
PlayerVP VP = &GetWorld()->GetFirstPlayerController()->GetPlayerViewPoint;
В итоге ошибка:
error C2276: '&': illegal operation on bound member function expression
Если забрать амперсанд, тогда другая ошибка:
error C3867: 'APlayerController::GetPlayerViewPoint': non-standard syntax; use '&' to create a pointer to member
Сигнатура самой функции GetPlayerViewPoint:
void AController::GetPlayerViewPoint( FVector& out_Location, FRotator& out_Rotation ) const
Указатели на функции нельзя использовать с нестатическими методами ("функциями членами класса").
А как заметили в комментариях, использовать указатели-на-члены-класса здесь смысла нет. С ними код не особо короче.
auto mem_ptr = &AController::GetPlayerViewPoint;
(GetWorld()->GetFirstPlayerController()->*mem_ptr)(x, y);
Лучше использовать другой вариант - сохранить ссылку на последний объект в цепочке:
auto &con = *GetWorld()->GetFirstPlayerController();
con->GetPlayerViewPoint(x, y);
Или сделать лямбду:
auto vp = [&](FVector &x, FRotator &y)
{
GetWorld()->GetFirstPlayerController()->GetPlayerViewPoint(x, y);
};
vp(x, y);
Сборка персонального компьютера от Artline: умный выбор для современных пользователей