我正在尝试以下方法:
boost::shared_ptr< tcp::socket > socket(new tcp::socket( *io_service));
boost::bind(&function, *socket); // compiler error: noncopyable error
function(*socket); // this works fine
void
function(tcp::socket & socket)
{
//do work
}
为什么我在使用boost :: bind?
时出错我后来尝试了以下内容:
boost::shared_ptr< tcp::socket > socket(new tcp::socket( *io_service));
boost::bind(&function, socket); //this works fine now
void function(boost::shared_ptr< tcp::socket > socket)
{
asio::read_until(&socket, buffer, "end"); // compiler error: says i am passing an invalid argument
}
为什么现在不行?
我知道我缺乏C / C ++编程的基本知识。
如果有人可以提供有助于解决此类问题的链接,那就太棒了。
答案 0 :(得分:4)
您正在尝试复制不可复制的对象。将它包装在boost :: ref对象中以将其作为参考:
boost::bind(&function, boost::ref(*socket));
答案 1 :(得分:3)
tcp :: socket是不可复制的,您需要将其作为参考传递:
boost::bind(&function, boost::ref(*socket));
您可能应该坚持使用第二个版本,因为您不必担心套接字对象的生命周期。
boost::bind(&function, socket);
void function(boost::shared_ptr< tcp::socket > socket)
{
asio::read_until(*socket, buffer, "end");
}