如何解决获取多维可变参数std :: array的根类型
我嵌套了std :: array,其尺寸由模板参数std :: array
我想知道如何获取类型为int的std :: array
在这种情况下,我们可以只做std :: array
解决方法
您可以使用基本的递归技术:
template <typename T>
struct nested_value_type { using type = T; };
template <typename T,std::size_t N>
struct nested_value_type<std::array<T,N>>
{
using type = typename nested_value_type<T>::type;
};
为方便起见提供别名模板:
template <typename T>
using nested_value_type_t = typename nested_value_type<T>::type;
瞧,
static_assert(std::is_same_v<
nested_value_type_t<std::array<int,1>>,int
>);
static_assert(std::is_same_v<
nested_value_type_t<std::array<std::array<float,1>,float
>);
static_assert(std::is_same_v<
nested_value_type_t<std::array<std::array<std::array<char,char
>);
使用C ++ 20的std::type_identity
时要短一些:
template <typename T>
struct nested_value_type : std::type_identity<T> { };
template <typename T>
using nested_value_type_t = typename nested_value_type<T>::type;
template <typename T,N>>
: std::type_identity<nested_value_type_t<T>> { };
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。