3

在查看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()of提供有用的示例std::reference_wrapper

4

1 回答 1

3

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

  • 模板参数class ... Args是为了使其在可以传递给底层 Callable 的参数方面具有通用性。
  • 操作符的返回类型必须是调用Callable产生的返回类型,由typename std::result_of<T&(ArgTypes&&...)>::typepart获取
  • 它使用invoke调用作为调用 Callable 的通用方式,无论它是什么类型的 Callable(Functor、函数指针、成员函数指针等),它都可以工作。
  • 它用于std::forward传递参数列表以实现完美转发- 例如,传入原始调用的左值和右值在底层调用中保留它们的左值/右值。
于 2016-06-01T11:54:37.760 回答