从对象中获取价值

尼科斯·阿塔纳修

我想获取一个对象的值(标题就是这样的破坏者)。

该对象可以是指针,也可以不是我正在寻找一个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

当然,这些是在类模板中T用作参数的地方使用的。我故意避免使用decltype和朋友来使事情在C ++ 03中实现:(

有没有更好,更简洁的方法?该解决方案是否可以“扩展”到C ++ 11 &&

乔纳森·韦克利(Jonathan Wakely)

只需重载指针和非指针的函数,就无需使用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); }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章