I have a method in my controller class, I want to store the method in a TFunction object. I've tried to use:
TFunction<void ()> FuncPtr{&PlayerController::ClassMethod};
It doesn't work.
My function signature is:
void ClassMethod();
            Asked
            
        
        
            Active
            
        
            Viewed 2,083 times
        
    2
            
            
         
    
    
        GigaKox69
        
- 41
- 2
- 
                    If `ClassMethod()` is not `static`, then `TFunction` will need a `PlayerController` object instance to call `ClassMethod()` on. But you are not assigning such an object to the `TFunction`. `TFunction` is designed to work much like C++'s `std::function`, and in C++ you would use `std::bind()` or a lambda to bind an object instance to a `std::function`. Not sure the Unreal equivalent of that. – Remy Lebeau Nov 01 '21 at 22:00
- 
                    As Remy is pointing out, you would bind with an instance of the class. [This](https://stackoverflow.com/questions/17131768/how-to-directly-bind-a-member-function-to-an-stdfunction-in-visual-studio-11) covers a lot of the territory. – lakeweb Jan 10 '22 at 20:25
1 Answers
-1
            
            
        //Let's say so:
.h
UFunction* ExecuteFunction;
UFUNCTION()
    void ChangeState(FName NextState)
UFUNCTION()
    void GlobalState_One()
UFUNCTION()
    void GlobalState_Two()
.cpp
void ChangeState(FName NextState)
{
    FName NameFunction = FName(FString("GlobalState_") + NextState.ToString());
    ExecuteFunction = FindFunction(NameFunction);
}
//Place of call
if (ExecuteFunction != nullptr)
            ProcessEvent(ExecuteFunction, nullptr);
//
//...
ChangeState("One");
//...
void GlobalState_One()
{
}
void GlobalState_Two()
{
    
}
- 
                    3Your answer could be improved with additional supporting information. Please [edit] to add further details, such as citations or documentation, so that others can confirm that your answer is correct. You can find more information on how to write good answers [in the help center](/help/how-to-answer). – Community Jan 10 '22 at 22:01