LeviLamina
Loading...
Searching...
No Matches
Emitter.h
1#pragma once
2
3#include <concepts>
4#include <type_traits>
5
6#include "ll/api/event/EmitterBase.h"
7#include "ll/api/event/EventBus.h"
8
9namespace ll::event {
10namespace detail {
11template <bool&>
13
14template <auto F, std::derived_from<Event>... Ts>
15inline bool emitterRegistration = [] {
16 auto& ins = EventBus::getInstance();
17 (ins.setEventEmitter<Ts>(F), ...);
18 return true;
19}();
20} // namespace detail
21
22template <auto F, std::derived_from<Event>... Ts>
23class Emitter
24: public EmitterBase,
25 private detail::StaticRegistrationAnchor<detail::emitterRegistration<F, Ts...>> {
26 static_assert((std::is_final_v<Ts> && ...), "Only final classes can be emitted");
27
28protected:
29 Emitter() = default;
30 ~Emitter() override = default;
31};
32} // namespace ll::event