CPP-TOOLBOX
Loading...
Searching...
No Matches
signal_emitter.hpp
Go to the documentation of this file.
1#ifndef SIGNAL_EMITTER_HPP
2#define SIGNAL_EMITTER_HPP
3
4#include <functional>
5#include <unordered_map>
6#include <vector>
7#include <typeindex>
8#include <any>
9#include <iostream>
10
44 public:
63 template <typename Signal>
64 void connect(std::function<void(const Signal &)> listener) {
65 auto &vec = listeners[typeid(Signal)];
66 vec.push_back(listener);
67 }
68
82 template <typename Signal>
83 void emit(const Signal &signal) {
84 auto it = listeners.find(typeid(Signal));
85 if (it == listeners.end())
86 return;
87
88 for (auto &listener_any : it->second) {
89 auto &fn = std::any_cast<std::function<void(const Signal &)> &>(listener_any);
90 fn(signal);
91 }
92 }
93
94 private:
102 std::unordered_map<std::type_index, std::vector<std::any>> listeners;
103};
104
105#endif // SIGNAL_EMITTER_HPP
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