使用std :: shared_ptr而不是boost :: shared_ptr时编译失败

ksl*_*ksl 0 c++ boost-bind shared-ptr boost-asio c++11

下面的代码成功地向给定端点发送异步消息.

// message is a boost::shared_ptr<std::string>

// open a UDP socket
boost::asio::ip::udp::socket socket(ioService);
socket.open(boost::asio::ip::udp::v4());

// create the remote endpoint
boost::asio::ip::udp::endpoint remoteEndpoint(boost::asio::ip::address_v4::from_string(address), port);

// asynchronously send a datagram to the remote endpoint
socket.async_send_to(boost::asio::buffer(*message),
                     remoteEndpoint,
                     boost::bind(&MyClass::handler,
                                 this,
                                 message,
                                 boost::asio::placeholders::error,
                                 boost::asio::placeholders::bytes_transferred));

socket.close();
Run Code Online (Sandbox Code Playgroud)

但是,如果我将类型更改message为a std::shared_ptr<std::string>而不是a boost::shared_ptr<std::string>则调用async_send_to不会编译.

错误是:

boost/boost/bind/bind.hpp:457:9: No matching function for call to object of type 'boost::_mfi::mf3<void, MyClass, const boost::shared_ptr<std::__1::basic_string<char> > &, const boost::system::error_code &, unsigned long>'.
Run Code Online (Sandbox Code Playgroud)

有人可以解释什么是错的吗?可能是因为我正在使用boost :: bind吗?

For*_*veR 5

看起来问题是,你的handler功能是接收boost::shared_ptr,std::shared_ptrboost::shared_ptr不是可以构建std::shared_ptr.