我不太擅长 C++(但我熟悉 OOP/Java),但我必须为我的 C++ 类创建一个游戏。我想设置一种游戏引擎,例如用于用 ActionScript 编写的 Flash 游戏。
我写了这两个类,其中Actor
的意思是作为一个基类(可能是抽象的)并且Player
应该实际实现它。
问题是我想避免函数中的重复代码addEventListener
和handle
重新声明_handlerMap
,因为我想实现数据隐藏等。
我猜,问题在于它_eventMap
应该包含handler
可以更改类Actor::*handler
和Player::*handler
. 可能吗?
class Actor {
protected:
typedef void(Actor::*handler)(Event);
map<int, handler> _handlerMap;
public:
virtual void addEventListener(int ID, handler h) {
_handlerMap.insert(std::make_pair(ID, h));
};
virtual void handle(int ID) {
handler h = _handlerMap[ID];
Event e;
if (h)
(this->*h)(e);
}
virtual void onUpdate(Event e) {
cout << "Actor::onUpdate()" << endl;
};
};
class Player : public Actor {
typedef void(Player::*handler)(Event);
map<int, handler> _handlerMap;
public:
void addEventListener(int ID, handler h) {
_handlerMap.insert(std::make_pair(ID, h));
};
void handle(int ID) {
handler h = _handlerMap[ID];
Event e;
if (h)
(this->*h)(e);
}
void onKeydown(Event e) {
cout << "Player::onKeyDown()" << endl;
};
};
我希望可以将 Player 声明为:
class Player : public Actor {
typedef void(Player::*handler)(Event);
public:
void onWhateverEvent(Event e);
}
我希望你明白。