使用 std::shared_ptr 而不是 boost::shared_ptr 时编译失败
Compilation failure when using std::shared_ptr instead of boost::shared_ptr
下面的代码成功地向给定端点发送了一条异步消息。
// 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();
但是,如果我将 message
的类型更改为 std::shared_ptr<std::string>
而不是 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>'.
谁能解释一下哪里出了问题?可能是因为我正在使用 boost::bind 吗?
看起来问题是,你的 handler
函数接收 boost::shared_ptr
,而不是 std::shared_ptr
并且 boost::shared_ptr
不能从 std::shared_ptr
.[=15 构造=]
下面的代码成功地向给定端点发送了一条异步消息。
// 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();
但是,如果我将 message
的类型更改为 std::shared_ptr<std::string>
而不是 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>'.
谁能解释一下哪里出了问题?可能是因为我正在使用 boost::bind 吗?
看起来问题是,你的 handler
函数接收 boost::shared_ptr
,而不是 std::shared_ptr
并且 boost::shared_ptr
不能从 std::shared_ptr
.[=15 构造=]