gpt4 book ai didi

c++ - 与 boost::asio 一起使用的 std::string 的替代品

转载 作者:IT老高 更新时间:2023-10-28 21:57:48 27 4
gpt4 key购买 nike

boost::asio的各种readwrite函数和方法接受 boost::asio::buffer .根据buffer's documentation , 一个可变的 std::string无法包裹在 boost::asio::buffer 中,因此不能用于 asio 的 read功能。这可能是因为 std::string不允许对其内部缓冲区进行可变访问(之前已讨论过 here)。

这很遗憾,因为 std::string是一种在 C++ 中表示可变数据缓冲区的便捷方式。没有它,我们要么只剩下 POD 数组,boost::arraystd::vector<char> .前两个对于可变长度消息不方便。 std::vector<char>可以工作,但在 (*) 周围携带数据缓冲区是一种不自然的方式

问题:

  1. 还有其他替代std::string 的方法吗?与 boost::asio用于读取缓冲区?我在这里遗漏了什么吗?
  2. 我想知道为什么 std::vector<char> 在可变缓冲区中支持。是因为它保证其内部缓冲区在内存中是连续的,并允许使用 &vec[0] 对其进行可变访问吗? ?

提前致谢


(*) 恕我直言。看protobuf例如序列化 - 它提供序列化到 std::string但不进入std::vector<char> ,至少不是明确的。


编辑:我最终使用了 vector<char>毕竟。 protobuf允许序列化为 vector<char>通过 SerializeToArray需要一个指针的调用(&vec[0] 可以在那里传递)。

最佳答案

使用 &str[0] 对字符串缓冲区的可变访问在所有已知实现上都可以正常工作,并且即将到来的 C++0x 标准化的措辞使其正式被允许。

不过,如果您认为 std::vector 是可变长度缓冲区的不自然表示,我认为您是疯了。

关于c++ - 与 boost::asio 一起使用的 std::string 的替代品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5248291/

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