Возврат нескольких возможных типов из функции - C ++ - PullRequest
1 голос
/ 06 августа 2020

Я делаю систему ввода для своего приложения. В настоящее время у меня есть класс 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;
    }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...