地图容器的问题

时间:2015-07-23 17:39:00

标签: c++11 boost boost-asio

简介

我尝试使用tcp连接创建端口转发示例,因此我需要使用其套接字映射客户端标识。当客户端请求端口转发时,我必须知道谁拥有套接字。

为此,我创建了以下代码:

std::map<std::string, tcp::socket> box_map;

std::map<std::string, tcp::socket>::iterator it;
it = box_map.find(id);
if (it != box_map.end())
    return;
else{
    box_map.insert(std::pair<std::string, tcp::socket>(id,s));
    return;
}

问题

但是我收到了以下错误:

error: use of deleted function ‘boost::asio::basic_stream_socket<boost::asio::ip::tcp>::basic_stream_socket(const boost::asio::basic_stream_socket<boost::asio::ip::tcp>&)’

1 个答案:

答案 0 :(得分:1)

tcp::socket不是可复制构造的。因此,您必须使用emplace移动套接字来构建新对:

box_map.emplace(id, std::move(s));

或者,你仍然可以使用insert,然后进入你正在构建的pair

box_map.insert(std::make_pair(id, std::move(s)));