我正在尝试设计一个简单的事件系统,“基本上”,看起来像这样:
HandleEvent(..)
,具有不同的重载用于编译时类型检测,而不是使用dynamic_casting
。在触发事件时最好选择:在堆栈上创建它们并通过引用传递它们,或者在堆上动态分配它们并使用dynamic_casting并让观察者在它们被对象处理时解除分配它们可以处理吗? (例如,当事件可以经常被触发时,不需要动态分配;动态转换怎么样,是不是可以避免?)。
此外,这不是一个线程安全的场景..
答案 0 :(得分:2)
您需要动态分配吗?通常,你想要
void fireEvent()
{
Event ev;
for ( each observer )
observer.trigger(ev);
}
观察员的签名
void trigger(const Event& ev);
请注意,“传递对它们的引用”并非如此,迂腐地说。它实际上是“通过引用传递它们。”