c++ - 由于“无法从 'std::pair 转换参数 1”,std::map 插入无法编译' 到 'std::pair&&'"
问题描述
我正在尝试为<MyKey, MyValue>
. MyKey
是一个枚举,MyValue
一个外部类。
调用myMap.insert({ key, value })
总是使编译失败并出现错误
"cannot convert argument 1 from 'std::pair<MyKey, MyValue>' to 'std::pair<const _Kty,_Ty> &&'"
尽管原始数据类型总是适用于std::map.insert()
,但当试图包含其他人编写的类时,这个问题经常发生。对于不同的第三方类,我尝试了许多变通方法,例如预先构造对象或在插入后设置它们的属性。但是我还没有找到解决这个问题的系统方法。似乎std::map
比 python 的dict
.
示例:使用第三方库cppzmq
,Visual Studio 2017
enum MyKey {
key1,
key2
}
std::map<MyKey, zmq::socket_t> mymap;
std::shared_ptr<zmq::context_t> g_context = std::make_shared<zmq::context_t>(1);
zmq:socket_t sock(*g_context, zmq::socket_type::pair);
mymap.insert({ key1, sock });
给了我上述错误。
这个错误是什么意思,一般如何解决?
请帮忙。
解决方案
如果您想将只移动对象插入到 a中,std::map
那么您唯一的选择是将其移动到地图中。调整你的例子,你可以试试这个:
mymap.insert({key1, zmq:socket_t{*g_context, zmq::socket_type::pair}});
你也可以这样做:
zmq:socket_t sock{*g_context, zmq::socket_type::pair};
mymap.insert({key1, std::move(sock)});
// note that sock is in a "moved from" state after this point
我看到你来自 Python,可能不熟悉移动语义,所以这个问题的答案可能会有所帮助。
推荐阅读
- sql-server - SSRS 中个人姓名的单独图表
- reactjs - 在 RxJS 或 Redux Observable 中 debounceTime 也起到延迟的作用
- swift - Swift - CoreData:从连接表中检索属性
- c# - 如何在 navMesh 中获取最近的对象并使代理向它移动
- javascript - 从 highstock 的数据结构中获取变量
- php - Symfony 3.4、composer post-install-cmd 和 env() 参数为默认值
- laravel - Summernote 不适用于 laravel 表单
- enums - 带有枚举的机器人构建器表单流
- reactjs - Semantic-UI React 中的侧边栏 + 固定顶部菜单
- powershell - Azure 应用程序网关重定向配置