1#ifndef SIGNAL_EMITTER_HPP
2#define SIGNAL_EMITTER_HPP
5#include <unordered_map>
63 template <
typename Signal>
64 void connect(std::function<
void(
const Signal &)> listener) {
65 auto &vec = listeners[
typeid(Signal)];
66 vec.push_back(listener);
82 template <
typename Signal>
83 void emit(
const Signal &signal) {
84 auto it = listeners.find(
typeid(Signal));
85 if (it == listeners.end())
88 for (
auto &listener_any : it->second) {
89 auto &fn = std::any_cast<std::function<void(
const Signal &)> &>(listener_any);
102 std::unordered_map<std::type_index, std::vector<std::any>> listeners;
A type-safe signal emitter that allows different signal types (represented as structs).
Definition signal_emitter.hpp:43
void connect(std::function< void(const Signal &)> listener)
Definition signal_emitter.hpp:64
void emit(const Signal &signal)
Definition signal_emitter.hpp:83