我正在为我的应用程序创建输入系统。我目前有一个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;
}