私は、さまざまなイベントを持つシンプルなイベントシステムを作成しようとしています。だから、私はあなたが関数を登録し、正しいタイプのイベントを受け取り、ブール値を返すことを可能にするイベントクラスを作成しようとしました。それが含まれるクラスと同じタイプのリスト
は、私が欲しいのはEvent
の任意のサブクラスのメソッドpost
がEvent
ではなく、そのサブクラスがかかりますし、各サブクラス内のリストlisteners
の関数は正しいサブクラスの種類を取るべきであるということです。ここでは、正しいイベント型にキャストする関数を強制的に私が既に持っているコードは、です:
events.h:
namespace events {
class Event {
public:
static const std::List<bool (*)(Event)> listeners;
void post(Event event);
}
class ExampleEvent : Event {
int eventData;
}
}
events.cpp:
namespace events {
void Event::post(Event event) {
for(int i = 0; i < listeners.size(); i++) {
if(listeners[i](event)) return;
}
}
}
されていますサブクラス化されたイベントで次のようなことをすることなく動作させることができます。
bool handleExample(Event event) {
ExampleEvent exampleEvent = (ExampleEvent)event;
std::cout << exampleEvent.eventData << std::endl;
return false;
}
// Somewhere else in the code
ExampleEvent::listeners.push_back(&handleExample);
私は間違ったコードについてお詫び申し上げますが、私はまだ完全な言語のルールを持っていません。
あなたは仮想関数せずに、派生クラスを持っている場合、あなたは間違ってそれをやっています。 –
@ n.m。私はむしろ仮想関数を持つ派生クラスがない場合は、間違っていると言うだろう。単一クラスは、基本クラスで実装されたデフォルトの動作を使用できます。 – davidhigh