【发布时间】:2020-06-04 20:23:12
【问题描述】:
必需是类型 T 的类型特征,如果 T 提供 typedef type 类型为 T::value_type 有一个 typedef value_type,否则有 T。
我尝试了以下实现,但它似乎不起作用(typedef 始终是 T 类型,即使存在 T::value_type 也是如此):
template <class T, class = void> struct value_type { using type = T; };
template <class T> struct value_type<T, typename T::value_type> { using type = typename T::value_type; };
template <class T> using value_type_t = typename value_type<T>::type;
std::is_same_v<value_type_t<int>, int> // true
std::is_same_v<value_type_t<std::optional<int>>, int> // false, should be true
有什么想法吗?
【问题讨论】:
标签: c++ templates sfinae typetraits