c++ - map::const_iterator 映射类型不是 const

标签 c++

我正在尝试为构建在 map 之上的类编写迭代器适配器。尝试从迭代器类型获取映射类型时遇到问题。基本上我想得到:

  • map::iterator --> Val
  • map::const_iterator --> Val const

  • 这是一个最小的再现。
    #include <map>
    #include <type_traits>
        
    template <typename BaseIteratorT>
    using ValueType = typename BaseIteratorT::value_type::second_type;
        
    // Passes
    static_assert(
        std::is_same<ValueType<std::map<double, int>::iterator>, int>::value,
        "bad type for mutable iterator");
    
    // Fails
    static_assert(
        std::is_same<ValueType<std::map<double, int>::const_iterator>, const int>::value,
        "bad type for const iterator");
    
    我怎样才能做到这一点(C++14)?

    最佳答案

    value_typestd::mapstd::pair<const Key, T> . second_type那对只是 T ,不是 const T ,不是 const T& , 只是 T .取消引用 map::const_iterator将返回 const pair&引用,但这不会改变那对的 second_typeconst .如果需要,请检测迭代器的 value_type 是否是 const与否,例如 std::is_const ,如果是,则申请 const到其 second_type ,例如 std::add_const .

    关于c++ - map::const_iterator 映射类型不是 const,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63696489/

    相关文章:

    c++ - 在 Release模式下编译时,大量嵌套循环会导致链接器无休止地运行吗?

    java - 无法通过 Java 在 MATLAB 中加载 DLL

    c++ - 在 C++ 中使用原子 TestAndSet 混合无锁和全锁线程同步

    c++ - OO编程问题: Global Object

    c++ - 使用指向派生类的指针作为模板参数时出错

    c++ - flto 与 gcc7.2 崩溃

    c++ - 在 key 之外的其他东西上订购容器

    c++ - 如何将指针作为双指针传递给类的指针属性?

    c++ - 在将 dijkstra 算法应用于此时,我究竟该如何处理以下情况?

    std::strings 队列通过 JNI 需要 C++ 共享内存吗?