gpt4 book ai didi

c++ - C++检查unordered_map/map的std::array包含相同的元素类型

转载 作者:行者123 更新时间:2023-12-02 09:52:42 25 4
gpt4 key购买 nike

我有一个模板类,接受MyIDType容器:

  • std::array<MyIDType, SIZE>
  • std::unordered_map<A, MyIDType>
  • std::unordered_map<B, MyIDType>

  • 我想静态声明 MyIDType为元素。我尝试了这个:
    template<class CONTAINER>
    class Cod
    {
    using ELEMENT_TYPE = typename CONTAINER::value_type;
    static_assert(std::is_same<ELEMENT_TYPE, MyIDType>::value);
    但意识到这会失败,因为 std::unordered_map的值类型实际上是 std::pair<something, MyIDType>检查 MyIDTypestd::arraystd::unordered_map的最佳方法是什么?
    该 map 具有 mapped_type,但显然当我传入数组时,它将无法编译。

    最佳答案

    您可以定义一个类型特征

    // primary template, for types containing value_type
    template <typename T, typename = void>
    struct get_element_type {
    using type = typename T::value_type;
    };
    // partial specialization, for types containing mapped_type
    template <typename T>
    struct get_element_type<T, std::void_t<typename T::mapped_type>> {
    using type = typename T::mapped_type;
    };
    然后
    template<class CONTAINER>
    class Cod
    {
    using ELEMENT_TYPE = typename get_element_type<CONTAINER>::type;
    static_assert(std::is_same<ELEMENT_TYPE, MyIDType>::value);
    LIVE

    关于c++ - C++检查unordered_map/map的std::array包含相同的元素类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63157338/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com