c++ - std::reference_wrapper 的实现

标签 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)...);
}

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

编辑:如果能为 std::reference_wrapper

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

最佳答案

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

  • 模板参数class ... Args是在可以传递给底层 Callable 的参数方面使其通用。
  • 运算符的返回类型必须是调用 Callable 产生的返回类型,它由 typename std::result_of<T&(ArgTypes&&...)>::type 获得。部分
  • 它使用 invoke call 作为调用 Callable 的通用方式,无论 Callable 是什么类型(Functor、函数指针、成员函数指针等),它都能正常工作。
  • 它使用 std::forward在传递参数列表中实现perfect forwarding - 因此,例如传递给原始调用的左值和右值在底层调用中保留其左值/右值。

关于c++ - std::reference_wrapper 的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37567222/

相关文章:

c++ - 处理带有奇怪字符的文本

c++ - EOF - scanf 和 printf

c++ - 这个 getter 返回的是构造函数给出的引用还是类内部对象的引用? C++

c++ - 字符串引用(函数)的差异

c++ - `push_back` 到 `vector< reference_wrapper<string>>` 导致索引 0 处的字符串为空

c++ - 我应该如何将容器转换为 reference_wrappers 的容器?

c++ - 使用 C 或 C++ 的微 Controller

c++ - 尝试用 C++ 编写一个只读取第一列数据并跳到下一行的类

C++ 在另一个方法中使用一个方法的局部变量

c++ - 如何将一个 vector 的元素引用复制到另一个 vector ?