我尝试以下操作:的boost ::绑定不可复制误差的shared_ptr <tcp::socket>
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 ::绑定?
后来我尝试了以下内容:
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++编程的基本知识。
如果任何人都可以包含一个可以帮助解决这类问题的链接,那就太好了。
第二种方法的问题是我无法读取套接字,因为它现在是一个指针。我以为我用&socket_ptr,会给我的套接字,而不是指针。你知道如何去做? – Takashi
您使用get()来获取指针。但这不是你想要传递的,你想要传递一个对套接字的引用。看到我编辑的答案。 – ronag