System
の派生インスタンスごとに、独自のイベント システムを介してイベントをサブスクライブしたい状況があります。基本的にこれは、別のインスタンスのメンバー フィールドであるイベントに std::function を渡すことを意味します。したがって、基本的には次のようになります。
// System.h
class System
{
public:
System(std::shared_ptr<EntityManager> entityManagerPtr);
virtual ~System();
virtual void componentAddedEventHandler(void* source, const ComponentAddedEventArgs& args);
protected:
std::shared_ptr<EntityManager> m_entityManagerPtr;
};
そして、デリゲートを使用した実装:
// System.cpp
System::System(std::shared_ptr<EntityManager> entityManagerPtr) : m_entityManagerPtr(entityManagerPtr)
{
// Subscribe to the componentAddedEvent
m_entityManagerPtr->componentAddedEvent += [&](void* source, ComponentAddedEventArgs args) {
this->componentAddedEventHandler(source, args);
};
}
しかし明らかに、これは を定義しないとコンパイルできませんSystem::componentAddedEventHandler()
。
System
から派生した各クラスがイベントをサブスクライブし、すべてのクラスがイベント ハンドラーの独自の実装を定義する必要があることを確認するには、どうすればよいでしょうか? それとも、そのような行動を強制するのはあまりにも不便なので、他の方法で達成する必要がありますか?