您好,在我当前的一个项目中,我想实现一个 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)
,但不幸的是总是调用默认处理程序。我对这个模式编程错了吗?谢谢大家,我一直在盯着我的代码,但我没有看到它。