C++11中std::reference_wrapper的理解

时间:2025-03-14 18:55:23
template <class T> class reference_wrapper { public: // types typedef T type; // construct/copy/destroy reference_wrapper(T& ref) noexcept : _ptr(std::addressof(ref)) {}//接受使用ref直接构造 reference_wrapper(T&&) = delete;// 说明,不可以传递右值 reference_wrapper(const reference_wrapper&) noexcept = default;//接受使用一个reference_wrapper构造 // assignment reference_wrapper& operator=(const reference_wrapper& x) noexcept = default; // access operator T& () const noexcept { return *_ptr; }// T&操作符的重载是其可以作为函数实参的关键 T& get() const noexcept { return *_ptr; } template< class... ArgTypes > std::invoke_result_t<T&, ArgTypes...> operator() ( ArgTypes&&... args ) const { return std::invoke(get(), std::forward<ArgTypes>(args)...); } private: T* _ptr; };