我只是想知道标准是否已经提供了一个。我知道自己制作一个很容易
// 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;
};
但是我觉得我忘了里面的东西或者订单错了,所以如果有一个准备好的话,那就好了。
答案 0 :(得分:19)
std::decay
可以执行此功能。
答案 1 :(得分:5)
我更喜欢将两种功能结合起来,因为它准确描述了目的:
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>