std::reference_wrapper 的实施

Implementation of std::reference_wrapper

同时查看 std::reference_wrapper 的实现 here

构造函数和运算符对我来说很明显,但我没看懂这部分

template< class... ArgTypes >
typename std::result_of<T&(ArgTypes&&...)>::type
  operator() ( ArgTypes&&... args ) const {
  return std::invoke(get(), std::forward<ArgTypes>(args)...);
}

谁能帮我简化一下...将不胜感激

编辑:如果能为 std::reference_wrapper

operator() 提供有用的示例会很棒

这定义了 operator() 成员函数,它适用于 std::reference_wrapper 包装对 Callable 的引用。它的目的是调用底层的Callable。

  • 模板参数class ... Args是为了使其在可以传递给底层Callable的参数方面具有通用性。
  • operator的return类型必须是调用Callable产生的return类型,由typename std::result_of<T&(ArgTypes&&...)>::type部分
  • 获取
  • 它使用 invoke 调用作为调用 Callable 的通用方式,无论 Callable 是什么类型(仿函数、函数指针、成员函数指针等),它都可以工作。
  • 它使用 std::forward 传递参数列表以实现 perfect forwarding - 因此,例如传递给原始调用的左值和右值在底层调用中保留它们的 l/rvalue-ness。