我嘗試以下操作:的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