Вы можете сделать это несколькими способами, лично я использовал подход, подобный следующему:
enum class Direction { LEFT, RIGHT, TOP, BOTTOM };
class MyCharacter {
template<Direction DIR> Vector MyCharacter::getVector() const;
template<Direction DIR> void move() {
AddMovementInput(getVector<Dir>() * magnitude);
}
}
template<> Vector MyCharacter::getVector<Direction::LEFT>() const { ... }
template<> Vector MyCharacter::getVector<Direction::RIGHT>() const { ... }
Конечно, вы можете сделать то же самое без шаблонов, но я думаю, что вы знаете, чтовы делаете, если они вам особенно нужны.
Имейте в виду, что вы можете напрямую передать функцию в качестве аргумента шаблона, но я нашел ее менее понятной, что-то вроде:
float GetActorForwardVector() { return 3.0f; }
class Foo
{
public:
template<float (*F)()> float move() { return F(); }
inline float moveLeft() { return move<GetActorForwardVector>(); }
};
int main()
{
Foo foo;
std::cout << foo.moveLeft();
}