执行std :: reference_wrapper

时间:2016-06-01 11:21:29

标签: c++ reference 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)...);
}

有人可以为我简化它...会很感激

编辑:并且很高兴为operator()

std::reference_wrapper提供有用的示例

1 个答案:

答案 0 :(得分:3)

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

  • 模板参数class ... Args是根据可传递给基础Callable的参数使其通用。
  • 运算符的返回类型必须是通过调用Callable生成的返回类型,该类型由typename std::result_of<T&(ArgTypes&&...)>::type部分
  • 获取
  • 它使用invoke调用作为调用Callable的通用方法,无论Callable的类型是什么(Functor,函数指针,成员函数指针等)都可以工作。
  • 它在传递参数列表时使用std::forward来实现perfect forwarding - 所以例如传入原始调用的lvalue和rvalues会在底层调用中保留它们的l / rvalue-ness。