c++ - 如何使用 emplace 在 C++ 中添加地图?
问题描述
尝试将条目添加到地图时出现编译错误。
地图声明:
std::map<std::string, Network::ClientConnectionPtr> activeUpstreamConnections_
添加到地图(这会导致编译错误如下所示):
activeDownstreamConnections_.emplace(identifier, clientConnectionPtr);
/usr/include/c++/7/ext/new_allocator.h:136:4: 错误:没有匹配函数调用'std::pair, std::unique_ptr ::pair(std::__cxx11::basic_string&, std ::unique_ptr&)'
下面的代码有效,但我以后无法使用 clientConnectionPtr 的值:
activeDownstreamConnections_.emplace(std::move(identifier), std::move(clientConnectionPtr));
我本质上是在尝试保留已建立的 TCP 连接的地图。如何修复编译错误并仍然能够重新使用存储在地图中的连接?
解决方案
从错误消息来看,它似乎Network::ClientConnectionPtr
是一个std::unique_ptr
,它是一个只移动类,它对动态分配的对象的唯一所有权进行建模。
因此,您必须std::move
在地图内使用它,因为它是不可复制的。要使用您在地图中放置的连接,您可以简单地通过查找访问它们,或存储原始指针/引用。例如
auto res = activeDownstreamConnections_.emplace(
std::move(identifier), std::move(clientConnectionPtr));
auto& connection = res.first->second;
// use `connection`...
推荐阅读
- javascript - 如何将从 Google 表格获取的值传递给 Node JS,以作为平面列表显示到 React Native
- c - 无法读取 C 中的文本文件
- ios - Firestore 复合 whereField 查询不起作用
- javascript - 放大存储 nosql - 如何编辑表?
- html - 无法制作等高的 Bootstrap 列
- html - 有没有办法模糊背景而不是文字
- java - 我如何能够显示数字出现的次数
- r - 如何为 R 中的摘要保持一些变量静态
- node.js - npm 错误!尝试获取时响应超时
- python - “tensorflow.python.framework.ops.EagerTensor”对象没有属性“_in_graph_mode”