鑄造一切爲void *,然後再是容易出錯。看看boost::signals或一些other信號/插槽庫。它可以幫助您避免丟棄類型信息。
一個類可以公開一個插槽然後調用它。例如,可能有像void PlayerMovedTo(Point position)
這樣的插槽。其他類可以連接到該插槽,並在信號發送時通知。
這裏的信號/槽機制一般是如何工作的草圖:
class Game {
public:
Signal<void (float, float)> PlayerMovedTo;
void update() {
if (downKeyPressed) {
y += 10;
PlayerMovedTo(x, y); // Tell everyone about it
}
}
};
class Mine {
public:
Mine() {
// There can be many mines, all connected to the one signal.
game.PlayerMovedTo.connect(this, &Mine::playerMoved);
}
void playerMoved(float x, float y) {
if (distance(this->x, this->y, x, y) < 10) {
boom();
}
}
};
你爲什麼不能繼承從一個單一的接口的所有活動? – imreal
您可能想看看觀察者設計模式(http://sourcemaking.com/design_patterns/observer) – Carl