gpt4 book ai didi

c++ - 将 boost 套接字放入 std::map

转载 作者:太空狗 更新时间:2023-10-29 20:08:11 26 4
gpt4 key购买 nike

我原以为这会很简单,但我一定遗漏了一些关键的东西,因此错误 =O。我在源文件中收到“使用已删除函数”错误。

无论如何,我知道我的头文件已正确连接,因为它已在整个源文件中正确调用,除了这一行之外,源代码片段是唯一需要评估的地方。

header 源代码

using boost::asio::ip::tcp;
tcp::acceptor mAcceptor;
std::map<std::string, tcp::socket> mSockets;

源文件代码

tcp::socket socket(ioService);
mAcceptor.accept(socket);
std::string myKey = "Socket"; // Didn't add actual key string creation
mSockets[myKey] = socket;

错误

错误:使用删除函数'boost::asio::basic_stream_socket& boost::asio::basic_stream_socket::operator{const boost::asio::basic_stream_socket&)'mSockets[myKey] = 套接字;

接着说:被隐式声明为已删除,因为“boost::asio::basic_stream_socket”声明了移动构造函数或移动赋值运算符类 basic_stream_socket。

更新

@Radosław Cybulski 建议尝试 std::move(socket) ,这消除了很大一部分错误,但现在结果是。

错误#2

'boost::asio::basic_stream_socket::basic_stream_socket()' second(std::forward<_Args2>(std::get<_Indexes2>(_tuple2))...)

最佳答案

尝试:

mSockets.insert({ myKey, std::move(socket) });

复制操作符被删除,因为没有好的方法来复制套接字。我的意思是,你连接到某个东西,然后复制,现在怎么办?您可以发送两份拷贝,只发送一份(哪一份?),还有其他的吗?所以它被删除了,如果你想传递它,使用移动构造函数/赋值和 std::move

编辑:由于空构造函数也被删除,您不能使用mSockets[key] = ...。所以我们必须依赖于insert/emplace。为什么? map 上的 operator[] 要求存在值类型的默认构造函数。我不知道为什么,但就是这样。

关于c++ - 将 boost 套接字放入 std::map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56634640/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com