Здравствуйте, в одном из моих текущих проектов я хочу реализовать InputMap.Итак, у меня есть абстрактный ввод
//Input.h
namespace INPUT {
class InputMap;
class Input {
public:
Input();
virtual ~Input();
virtual void Dispatch( InputMap * pMap ) = 0;
};
}
и InputMap
//InputMap.h
namespace INPUT {
class InputMap {
public:
InputMap();
virtual void HandleInput( INPUT::Input & anInput ) {
}
virtual ~InputMap();
};
}
, пока что все хорошо - здесь нет никакой функциональности.Теперь я извлекаю свой первый реальный вход из моего абстрактного входного класса:
//StringInput.h
#include "Input.h"
#include "InputMap.h"
#include <string>
class StringInput : INPUT::Input {
public:
StringInput();
virtual ~StringInput();
void Dispatch(INPUT::InputMap * pMap)
{
pMap->HandleInput( *this );
}
void SetMessage(std::string message);
std::string GetMessage() const;
private:
std::string m_message;
};
, и вот мой производный InputMap
//MyInputMap.h
#include "InputMap.h"
#include "StringInput.h"
class MyInputMap: public INPUT::InputMap {
public:
MyInputMap();
void HandleInput( StringInput & anInput );
void HandleInput( INPUT::Input & anInput );
virtual ~MyInputMap();
};
, а вот тест:
//main.cpp
MyInputMap map;
StringInput input;
input.SetMessage("Test");
input.Dispatch(&map);
конечно, я ожидаю, что input.Dispatch(&map)
вызывает map.HandleInput(StringInput input)
, но, к сожалению, всегда вызывается обработчик по умолчанию.Я неправильно запрограммировал этот шаблон?Спасибо, ребята, я смотрю свой код вечно, но я его не вижу.