Я делаю систему ввода для своего приложения. В настоящее время у меня есть класс InputManager, в котором хранится список экземпляров InputAction. Я хочу иметь функцию на InputManager, которая получает какое-то значение из любого своего InputAction. Проблема в том, что я хочу создать дочерние элементы InputAction, возвращающие разные типы значений. Например, для нажатия клавиши я хочу, чтобы KeyInputAction возвращало логическое значение, а MouseMoveInputAction должно возвращать вектор с плавающей запятой. Возможно ли это или это плохой дизайн?
template <class T>
class InputAction
{
public:
InputAction(std::string name);
~InputAction();
template <class T>
virtual T GetValue();
protected:
std::string m_Name;
};
class InputManager
{
public:
InputManager();
~InputManager();
template <typename T>
T GetValue(std::string actionName);
private:
std::hash_map<std::string, InputAction*> m_InputActionMap;
};
template <typename T>
T InputManager::GetValue(std::string actionName)
{
InputAction* action = m_InputActionMap.at(actionName);
auto value = action->GetValue();
return value;
}