从对象中获取价值

Nik*_*iou 2 c++

我想得到一个对象的价值(标题是这样的扰流板).

该对象可以是指针或不是.我正在寻找一个STL函数,它将成为"反转对应物"std::decay

到目前为止我看到的是这样的:

template<typename T>
typename std::enable_if<std::is_pointer<T>::value, 
typename std::add_reference<typename std::remove_pointer<T>::type>::type>::type 
deref(T val) 
{ return *val; } // lets call it the * policy

template<typename T>
typename std::enable_if<!std::is_pointer<T>::value, 
typename std::add_reference<T>::type>::type 
deref(T& val) 
{ return val; } // lets call it the plain policy
Run Code Online (Sandbox Code Playgroud)

当然,这些是在类模板中使用的,其中T是一个参数.我故意避免使用decltype和朋友在C++ 03中实现可实现的东西:(

有更好,更明智的方式吗?这个解决方案会"缩放"到C++ 11 &&吗?

Jon*_*ely 5

只需重载指针和非指针的函数,就不需要使用SFINAE或类型特征:

template<typename T>
  T& deref(T* val) 
  { return *val; }

template<typename T>
  T& deref(T& val) 
  { return val; }
Run Code Online (Sandbox Code Playgroud)

为了完美转发,只需使用转发引用而std::forward不是第二个重载:

template<typename T>
  T&& deref(T&& val) 
  { return std::forward<T>(val); }
Run Code Online (Sandbox Code Playgroud)