std::remove_const<std::unordered map> 似乎不起作用

std::remove_const<std::unordered map> doesn't seem to be working

void foo( const std::unordered_map<char, int> & m )
{
    using M = std::remove_const< decltype( m ) >;
    M mutable_map;
    mutable_map['a'] = 42;
}

失败并显示“不匹配运算符[]”。在我的实际代码中,我将地图放在 std::pair 中,错误消息更清楚:“将 const std::unordered_map<...> 作为 this 丢弃限定符”。

怎么了?我不能使用 const_cast<>() 因为我不知道类型(地图模板参数)。

第一个问题是您使用的是 std::remove_const 而不是: std::remove_const::typestd::remove_const_t.

第二个问题是你需要一个值,而不是一个引用,所以你还需要丢弃一个引用,所以你需要std::decay_t.

Demo

#include <unordered_map>
#include <type_traits>

void foo( const std::unordered_map<char, int> & m )
{
    using M = std::decay_t< decltype( m ) >;
    M mutable_map;
    mutable_map['a'] = 42;
}