三行代码  ›  专栏  ›  技术社区  ›  Brian Yeh

调用以互斥体作为参数进行配对失败。无法将互斥体插入无序映射

  •  0
  • Brian Yeh  · 技术社区  · 1 年前

    以下是一个错误

    std::mutex mtx;
                auto t = std::make_pair(std::string("hello"), mtx);
    

    std::mutex mtx;
                auto t = std::make_pair(std::string("hello"), 1);
    

    std::unordered_map<std::string, std::mutex>

    使用:

    mHeartBeatMutexes.insert(std::make_pair(std::string("hello"), mtx));

    但我的IDE说这是错误的,我不知道为什么。

    1 回复  |  直到 1 年前
        1
  •  2
  •   NathanOliver    1 年前

    std::mutex 不可复制或移动。当你这么做的时候

    std::mutex mtx;
    auto t = std::make_pair(std::string("hello"), mtx);
    

    mHeartBeatMutexes.insert(std::make_pair(std::string("hello"), mtx));
    

    std::make_pair mtx 不可复制。

    std::mutex mtx;
    auto t = std::make_pair(std::string("hello"), 1);
    

    1 是一个整数文本,它具体化为一个临时的整数,被移动(复制,因为它是同一件事),这一切都好。

    std::unordered_map<std::string, std::mutex> 您需要做的是使用emplace函数在 unordered_map std::piecewise_construct 过载和 std::forward_as_tuple

    std::unordered_map<std::string, std::mutex> foo;
    foo.emplace(std::piecewise_construct,
                std::forward_as_tuple("hello"),
                std::forward_as_tuple());
    
    推荐文章