13 using EventHandler = std::function<void(
const std::any&)>;
14 using SubscriptionId = size_t;
16 virtual SubscriptionId Subscribe(std::string_view eventType, EventHandler handler) = 0;
17 virtual void Unsubscribe(SubscriptionId
id) = 0;
18 virtual void Publish(std::string_view eventType, std::any data) = 0;
22 SubscriptionId Subscribe(std::function<
void(
const T&)> handler) {
23 return Subscribe(
typeid(T).name(), [handler](
const std::any& data) {
24 if (
auto* ptr = std::any_cast<T>(&data)) {
31 void Publish(T&& data) {
32 Publish(
typeid(T).name(), std::any(std::forward<T>(data)));