#pragma once #include "platform/platform.hpp" #include #include #include namespace platform { template class SafeCallback; // Calls callback on main thread, all params are copied. // If not initialized nothing will be done. // *NOTE* The class is not thread-safe. template class SafeCallback { public: SafeCallback() = default; template SafeCallback(Fn const & fn) : m_fn(fn) { } operator bool() const noexcept { return static_cast(m_fn); } void operator()(Args... args) const { if (m_fn) GetPlatform().RunTask(Platform::Thread::Gui, std::bind(m_fn, std::move(args)...)); } private: std::function m_fn; }; } // namespace platform