C++11中std::reference_wrapper的理解
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;
};