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

问题描述 投票:14回答:2

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

// 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;
};

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

c++ c++11 typetraits
2个回答
19
投票

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


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>

© www.soinside.com 2019 - 2024. All rights reserved.