从对象中获取价值

时间:2014-09-30 14:51:03

标签: c++

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

该对象可能是指针。我正在寻找一个STL函数,它将成为"反转对应物#34; 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

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

有更好,更明智的方式吗? 这个解决方案是否会缩放&#34;到C ++ 11 && s?

1 个答案:

答案 0 :(得分:5)

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

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

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

为了完美转发,只需使用转发参考和std::forward而不是第二次重载:

template<typename T>
  T&& deref(T&& val) 
  { return std::forward<T>(val); }