+ class FunctionLoopCallback : public LoopCallback {
+ public:
+ explicit FunctionLoopCallback(Func&& function)
+ : function_(std::move(function)) {}
+
+ void runLoopCallback() noexcept override {
+ function_();
+ delete this;
+ }
+
+ private:
+ Func function_;
+ };
+
+ // Like FunctionLoopCallback, but saves one allocation. Use with caution.
+ //
+ // The caller is responsible for maintaining the lifetime of this callback
+ // until after the point at which the contained function is called.
+ class StackFunctionLoopCallback : public LoopCallback {
+ public:
+ explicit StackFunctionLoopCallback(Func&& function)
+ : function_(std::move(function)) {}
+ void runLoopCallback() noexcept override {
+ Func(std::move(function_))();
+ }
+
+ private:
+ Func function_;
+ };
+