diff --git a/include/icsneo/communication/message/callback/messagecallback.h b/include/icsneo/communication/message/callback/messagecallback.h index e7bc194..60616f3 100644 --- a/include/icsneo/communication/message/callback/messagecallback.h +++ b/include/icsneo/communication/message/callback/messagecallback.h @@ -14,12 +14,20 @@ class MessageCallback { public: typedef std::function< void( std::shared_ptr ) > fn_messageCallback; - MessageCallback(fn_messageCallback cb, std::shared_ptr f) : callback(cb), filter(f) {} - MessageCallback(fn_messageCallback cb, MessageFilter f = MessageFilter()) : callback(cb), filter(std::make_shared(f)) {} + MessageCallback(fn_messageCallback cb, std::shared_ptr f) + : callback(cb), filter(f ? f : std::make_shared()) { + if(!cb) + throw std::bad_function_call(); + } + + MessageCallback(fn_messageCallback cb, MessageFilter f = MessageFilter()) + : MessageCallback(cb, std::make_shared(f)) {} // Allow the filter to be placed first if the user wants (maybe in the case of a lambda) - MessageCallback(std::shared_ptr f, fn_messageCallback cb) : callback(cb), filter(f) {} - MessageCallback(MessageFilter f, fn_messageCallback cb) : callback(cb), filter(std::make_shared(f)) {} + MessageCallback(std::shared_ptr f, fn_messageCallback cb) + : MessageCallback(cb, f) {} + MessageCallback(MessageFilter f, fn_messageCallback cb) + : MessageCallback(cb, std::make_shared(f)) {} virtual bool callIfMatch(const std::shared_ptr& message) const { bool ret = filter->match(message); @@ -31,8 +39,8 @@ public: const fn_messageCallback& getCallback() const { return callback; } protected: - fn_messageCallback callback; - std::shared_ptr filter; + const fn_messageCallback callback; + const std::shared_ptr filter; }; }