decltype
返回完整类型的表达式/实体。是否有可能只获得类型?
例如,在这种情况下是否可以使p
具有T
类型?
class T;
T t;
const T& tt = t;
decltype(tt) p; //decltype makes this const T& too as same as tt
答案 0 :(得分:3)
完全取决于您在cv T*
和cv T[N]
的情况下要执行的操作。如果在所有这些情况下你只想要T
,那么你需要写一个类型特征:
template <typename T>
struct tag { using type = T; };
template <typename T>
struct just_t
: std::conditional_t<std::is_same<std::remove_cv_t<T>,T>::value,
tag<T>,
just_t<std::remove_cv_t<T>>>
{ };
template <typename T>
struct just_t<T*> : just_t<T> { };
template <typename T>
struct just_t<T&> : just_t<T> { };
template <typename T, size_t N>
struct just_t<T[N]> : just_t<T> { };
template <typename T>
struct just_t<T[]> : just_t<T> { };
如果您对指针保持原样并且数组衰减成指针,那么只需:
template <typename T>
using just_t = std::decay_t<T>;