public:
template<typename T, typename... Args>
void emit(Args &&...) const;
+
+ template<typename T, typename... Args>
+ void emit_to(EventObserver &, Args &&...) const;
};
+template<typename... E>
+template<typename T>
+inline void EventSource<E...>::cancel_observation()
+{
+ for(const auto &h: static_cast<EventDispatcher<T> &>(*this).handlers)
+ h.observer->remove_source(*this);
+}
+
template<typename... E>
template<typename T, typename... Args>
inline void EventSource<E...>::emit(Args &&... args) const
}
template<typename... E>
-template<typename T>
-inline void EventSource<E...>::cancel_observation()
+template<typename T, typename... Args>
+inline void EventSource<E...>::emit_to(EventObserver &obs, Args &&... args) const
{
- for(const auto &h: static_cast<EventDispatcher<T> &>(*this).handlers)
- h.observer->remove_source(*this);
+ T event(std::forward<Args>(args)...);
+ static_cast<const EventDispatcher<T> &>(*this).dispatch_to(obs, event);
+ bus.dispatch_to(obs, event);
}
} // namespace Msp::Game