added type shortcuts in message_bus

This commit is contained in:
Sascha Kühl 2025-10-17 08:53:41 +02:00
parent 1d40c72519
commit 009498fae1
1 changed files with 23 additions and 5 deletions

View File

@ -179,6 +179,22 @@ class message_bus {
public:
using HandlerId = uint64_t; /**< Type alias for handler IDs. */
/**
* @brief Type alias for message filter functions.
* @tparam MessageType The type of message the filter operates on.
*/
template<typename MessageType>
using Filter = std::function<bool(const MessageType&)>;
/**
* @brief Type alias for member function pointers used as message handlers.
* @tparam MessageType The type of message the handler processes.
* @tparam CallerClass The class that contains the member function.
*/
template<typename MessageType, typename CallerClass>
using MemberHandler = void (CallerClass::*)(const MessageType&);
/**
* @brief Constructs a new message_bus object.
*/
@ -194,7 +210,7 @@ public:
*/
template<typename MessageType>
subscription subscribe(std::function<void(const MessageType&)> handler,
std::function<bool(const MessageType&)> filter = nullptr)
Filter<MessageType> filter = nullptr)
{
auto id = next_id_.fetch_add(1, std::memory_order_relaxed);
std::unique_lock writeLock(mutex_);
@ -227,8 +243,9 @@ public:
* @return A subscription object to manage the handler's registration.
*/
template<typename MessageType, typename CallerClass>
subscription subscribe(CallerClass* instance, void (CallerClass::*memberFn)(const MessageType&),
std::function<bool(const MessageType&)> filter = nullptr)
subscription subscribe(CallerClass* instance,
MemberHandler<MessageType, CallerClass> memberFn,
Filter<MessageType> filter = nullptr)
{
auto fn = [instance, memberFn](const MessageType& m) { (instance->*memberFn)(m); };
return subscribe<MessageType>(std::function<void(const MessageType&)>(fn), std::move(filter));
@ -245,8 +262,9 @@ public:
* @return A subscription object to manage the handler's registration.
*/
template<typename MessageType, typename CallerClass>
subscription subscribe(std::shared_ptr<CallerClass> instance, void (CallerClass::*memberFn)(const MessageType&),
std::function<bool(const MessageType&)> filter = nullptr)
subscription subscribe(std::shared_ptr<CallerClass> instance,
MemberHandler<MessageType, CallerClass> memberFn,
Filter<MessageType> filter = nullptr)
{
std::weak_ptr<CallerClass> w = instance;
auto handler = [w, memberFn](const MessageType& m) {