The reason that your function doesn’t work out of the box is that the function signature has to be defined. Note that the variadic variant of this function also requires a template type Delegate.
If you look at the InputComponent header you’ll find that the full signature of the non-variadic version looks like this.
Note the “typename FInputActionHandlerSignature” part. This is a typedef for TDelegate
The variadic version looks like this:
template< class DelegateType, class UserClass, typename… VarTypes >
FInputActionBinding& BindAction( const FName ActionName, const EInputEvent KeyEvent, UserClass* Object, typename DelegateType::template TUObjectMethodDelegate< UserClass >::FMethodPtr Func, VarTypes… Vars )
It expects a type that has a template member with the name TUObjectMethodDelegate. Although you could make your class that has such a member template, in most every case you’d want to call the variadic version like so:
Your question is almost two years old, but who knows, maybe it’s still useful to you. I hope it will at least be for the next visitors with the same question.