#pragma once #include #include namespace utils { class UniqueCall { public: struct Lock {}; template void operator()(Functor&& functor, Args&&... args) { if (lock.expired()) { auto l = std::make_shared(); lock = l; functor(std::move(l), std::forward(args)...); } } private: std::weak_ptr lock; }; } // namespace utils