使用 boost 的 socket.async_send_to()

Using boost's socket.async_send_to()

我已经坚持了一段时间了。我正在尝试发送以下内容:

boost::shared_ptr<uint8_t[]> m_data

通过电线使用:

_socket.async_send_to(boost::asio::buffer(m_data), m_remote_endpoint,
        boost::bind(&UDPServer::handle_send, this, message,
        boost::asio::placeholders::error,
        boost::asio::placeholders::bytes_transferred));

我收到错误 "no instance of overloaded function boost::asio::buffer matches the argument list boost::shared_ptr<uint8_t[]>"

m_data在另一个函数中填写。

我怀疑这是因为我实际上必须在 m_data 上使用关键字 new。但我不太清楚该怎么做。我尝试了几种不同的变体。有人可以在这里给我一些见解吗?这可能更多是关于如何取消引用共享指针的问题。提前致谢!

boost::asio::buffer 有一个令人印象深刻的构造函数列表,但它们都没有 shared_ptr<[]>(可能是 lib 作者的疏忽)。

在你的情况下,你只需要取消引用共享 ptr,例如,通过调用 get 就可以了。