Function::asStdFunction()
[folly.git] / folly / Function-pre.h
index 293efbcb891fddf90efb19ae929c254e0a5119c4..5e91fbb5f59250cda2c3ec110d14b4855f8043b8 100644 (file)
@@ -313,6 +313,20 @@ class FunctionTypeTraits<R(Args...) const>::ExecutorMixin {
   InvokeFunctionPtr const invokePtr;
 };
 
+template <class Function>
+struct InvokeFromSharedPtr final {
+  std::shared_ptr<Function> ptr_;
+
+  explicit InvokeFromSharedPtr(std::shared_ptr<Function> ptr)
+      : ptr_(std::move(ptr)) {}
+
+  template <typename... Args>
+  auto operator()(Args&&... args)
+      -> decltype((*ptr_)(std::forward<Args>(args)...)) {
+    return (*ptr_)(std::forward<Args>(args)...);
+  }
+};
+
 } // namespace function
 } // namespace detail
 } // namespace folly