我希望找到一个asio :: buffer类型/构造函数,我可以通过std::string
发送std::vector
和asynch_send_to
个对象。
请注意我使用独立 asio,没有提升!
现在,我用来发送数据的功能是:
void UdpSocket::send_datagram(asio::const_buffer buffer) {
mSocket.async_send_to(buffer, mEndpoint,
[this, datagram](const asio::error_code& error, std::size_t bytes_transferred) {
if (!error) {
// stuff...
}
else{
// other stuff..
}
});
}
我希望能够使用:
std::vector mVector;
send_datagram(asio::buffer(mVector.data(), mVector.size());
或
std::string mString = "hello world";
send_datagram(asio::buffer(mString.data(), mString.length());
上面给出了buffer_sequence_adapter.hpp
中的一系列错误:
我对缓冲区的数量和它们之间的兼容性有点不知所措;有人可以帮我理清哪种类型的缓冲区/构造函数可以使用std::vector
和std::string
类型?
谢谢!
答案 0 :(得分:1)
你可以接受缓冲区指针&作为参数的长度,这可能是最可扩展的方式:
void UdpSocket::send_datagram(const char *buf, size_t len) {
mSocket.async_send_to(asio::buffer(buf, len), mEndpoint,
[this, datagram](const asio::error_code& error, std::size_t bytes_transferred) {
这使您几乎可以使用任何存储,为方便起见,您可以编写如下的简单重载:
void send_datagram(const std::string &s) { send_datagram(s.c_str(), s.size()); }
void send_datagram(const std::vector<char> &s) { send_datagram(s.data(), s.size()); }
但是在这个片段中你应该记住一些事情: