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。
同时查看 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。