我想得到一个对象的价值(标题是这样一个扰流板)。
该对象可能是指针。我正在寻找一个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?
答案 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); }