是否可以从decltype中获取类型?

时间:2015-07-07 16:15:06

标签: c++ c++11 decltype

decltype返回完整类型的表达式/实体。是否有可能只获得类型?

例如,在这种情况下是否可以使p具有T类型?

class T;
T t;
const T& tt = t;
decltype(tt) p; //decltype makes this const T& too as same as tt

1 个答案:

答案 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>;