查看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
提供有用的示例
答案 0 :(得分:3)
这定义了operator()
成员函数,该函数适用于包装对Callable的引用的std::reference_wrapper
。它的目的是调用底层的Callable。
class ... Args
是根据可传递给基础Callable的参数使其通用。typename std::result_of<T&(ArgTypes&&...)>::type
部分invoke
调用作为调用Callable的通用方法,无论Callable的类型是什么(Functor,函数指针,成员函数指针等)都可以工作。std::forward
来实现perfect forwarding - 所以例如传入原始调用的lvalue和rvalues会在底层调用中保留它们的l / rvalue-ness。