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

标签 c++ c++11 boost-asio shared-ptr boost-bind

下面的代码成功地将异步消息发送到给定的端点。

// 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_ptrboost: :shared_ptr 不能从 std::shared_ptr 构造。

关于c++ - 使用 std::shared_ptr 而不是 boost::shared_ptr 时编译失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28323997/

相关文章:

c++ - 使用模板插入函数丢失数字

c++ - 为什么要求自定义分配器是可复制构造的?

c++ - 我的错误,还是英特尔编译器中的错误? sizeof 非静态成员错误

c++ - 用户定义转换中的模板参数类型推导

c++ - C++中智能指针的悬挂引用

c++ - 为什么我不允许将返回 const char* 的函数的结果分配给 char*,但可以将字符串文字(常量)分配给 char*?

c++ - 创建 sslstream vector

boost - 关闭带有挂起连接的 boost::asio::ip::tcp::socket

boost-asio - 已弃用的 get_io_service() 的替代方法

c++ - HANDLE_MSG 宏给出 'HANDLE_0xXXXX is undefined'