diff --git a/qthing/include/qthing/callback.hpp b/qthing/include/qthing/callback.hpp new file mode 100644 index 0000000000000000000000000000000000000000..288607d12070759e1a9a8c7dfd87acf1b99be87a --- /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