是否有类型特征立即删除顶级cv和引用?

Xeo*_*Xeo 15 c++ type-traits c++11

我只是想知道标准是否已经提供了一个.我知道自己制作一个很容易

// for C++03, use <tr1/type_traits> and std::tr1
#include <type_traits>

template<class T>
struct remove_toplevel{
  typedef typename std::remove_reference<T>::type noref_T;
  typedef typename std::remove_cv<noref_T>::type noref_nocv_T;
  typedef noref_nocv_T type;
};
Run Code Online (Sandbox Code Playgroud)

但是我觉得我忘记了那里的东西或者订单错了,所以如果有一个准备好的话,那就好了.

Pup*_*ppy 20

std::decay我相信,我会执行此功能.

  • 浏览了C++ 0x FDIS doc并在`decay`上的`20.9.7.6 [meta.trans.other]`下找到了这个引用:"这个行为类似于左值到右值,数组到指针,当左值表达式用作右值时应用的函数到指针转换,但也从类类型**中剥离cv限定符,以便更接近地模拟按值传递**的参数." (4认同)
  • 衰减可以做很多与删除ref和cv限定词完全正交的事情。它确实做到了。但是,这个答案就像有人问如何喝水,然后你告诉他们可以使用消防水带。 (2认同)

wjs*_*wjs 6

我更喜欢将两种功能结合起来,因为它确切地描述了目的是什么:

C++ 11 std::remove_cv<std::remove_reference<T>::type>::type

C++ 14 std::remove_cv_t<std::remove_reference_t<T>>

C++ 20 std::remove_cvref_t<T>