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