added type shortcuts in message_bus
This commit is contained in:
parent
1d40c72519
commit
009498fae1
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue