From 728ea54a222849f4b2c74e7e4391a21e141b3e79 Mon Sep 17 00:00:00 2001 From: Jens Nolte <jens@nightmarestudio.de> Date: Sun, 28 Jun 2020 01:54:09 +0200 Subject: [PATCH] Add callback template --- qthing/include/qthing/callback.hpp | 35 ++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 qthing/include/qthing/callback.hpp diff --git a/qthing/include/qthing/callback.hpp b/qthing/include/qthing/callback.hpp new file mode 100644 index 0000000..288607d --- /dev/null +++ b/qthing/include/qthing/callback.hpp @@ -0,0 +1,35 @@ +#pragma once + +#include <functional> + +namespace qthing { + +template <typename... Args> +class Callback { + private: + using CallbackType = std::function<void(Args...)>; + mutable CallbackType callback = NULL; + + public: + Callback(){}; + + void add(CallbackType newCallback) const { + if (callback == NULL) { + callback = newCallback; + } else { + auto oldCallback = callback; + callback = [newCallback, oldCallback](Args&&... args) { + oldCallback(std::forward<Args>(args)...); + newCallback(std::forward<Args>(args)...); + }; + } + } + + void operator()(Args&&... args) const { + if (callback != NULL) { + callback(std::forward<Args>(args)...); + } + } +}; + +} // namespace qthing -- GitLab