我有一种情况,我希望每个派生实例都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
都订阅事件的最佳方法是什么,并且它们都必须为事件处理程序定义自己的实现?还是强迫这种行为太不方便了,所以应该以其他方式实现?