gpt4 book ai didi

c++ - asio::buffer 类型用于发送 std::vector 和 std::string

转载 作者:行者123 更新时间:2023-11-30 05:30:20 26 4
gpt4 key购买 nike

我想找到一个 asio::buffer 类型/构造函数,我可以使用它来发送 std::stringstd::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 中的一系列错误:

  • 'const_iterator': 不是'asio::const_buffer'的成员
  • 'begin': 不是'asio::const_buffer'的成员
  • 'end': 不是'asio::const_buffer'的成员
  • 'iter': 未声明的标识符

缓冲区的数量和它们之间的兼容性让我有点不知所措;有人可以帮我弄清楚哪种类型的缓冲区/构造函数可以同时采用 std::vectorstd::string 类型吗?

谢谢!

最佳答案

您可以接受缓冲区指针和长度作为参数,这可能是最可扩展的方式:

 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()); }

但是在这个片段中你应该记住一些事情:

  1. 您应该让源缓冲区保持事件状态,直到异步操作完成。
  2. 不要复制数据/缓冲区(不允许数据在作用域退出时被 free()'d/删除,就像在第一个代码段中一样)

关于c++ - asio::buffer 类型用于发送 std::vector 和 std::string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36002426/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com