A single header C++ event bus implementation for decoupled event-driven communication.
#include "event_bus.hpp"
// Define custom events (any type works)
struct PlayerDamaged {
int playerId;
float damage;
};
struct GameOver {
int winnerId;
};
// Create event bus
EventBus bus;
// Subscribe to events, with the pointer to this class as a handle for later unsubscription.
bus.Subscribe<PlayerDamaged>([](const PlayerDamaged& e) {
std::cout << "Player " << e.playerId << " took " << e.damage << " damage\n";
}, this);
bus.Subscribe<GameOver>([](const GameOver& e) {
std::cout << "Player " << e.winnerId << " wins!\n";
}, this);
// Publish events
bus.Publish(PlayerDamaged{1, 25.0f});
bus.Publish(GameOver{1});
// Unsubscribe
bus.Unsubscribe<PlayerDamaged>(this);
bus.Unsubscribe<GameOver>(this);Copy event_bus.hpp to your project and include it.
- Not thread-safe
- Subscribers must manage their own lifetime
- No event priority or ordering guarantees
- More robust subscription handle system
- Support for multiple channels (game, engine, ...)
