我想得到一个对象的价值(标题是这样的扰流板).
该对象可以是指针或不是.我正在寻找一个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 &&吗?
只需重载指针和非指针的函数,就不需要使用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)
| 归档时间: |
|
| 查看次数: |
63 次 |
| 最近记录: |