gpt4 book ai didi

c++ - basic_streambuf::setbuf 应该设置哪个缓冲区?

转载 作者:太空狗 更新时间:2023-10-29 21:27:56 24 4
gpt4 key购买 nike

我正在开发一个 basic_streambuf 来处理从/到 Winsock 套接字的读取和写入。就像 basic_filebuf 一样,我在内部使用 std::codecvt 对象将从底层套接字读取的字节转换为“socket streambuf”的 char 类型,以及将写入套接字 streambuf 的字符转换为可以写入底层套接字的字节。为此,我发现我需要为 streambuf 的读取和写入功能维护缓冲区。

我遇到的逻辑问题是,streambuf 实现旨在用于读取和写入(std::iostream constructor 采用单个指向 streambuf 的指针),但只有一个可重写的成员函数可以为设置底层字符缓冲区而定制:setbuf .如果我想让我的套接字流缓冲区模板的用户设置底层缓冲区,setbuf 应该设置读取缓冲区还是写入缓冲区?哪个选项更有意义?

最佳答案

std::iostream继承自 std::istreamstd::ostream , 但那些实际上都继承自 std::ios ,其中包含缓冲区。因为它们实际上都继承自 std::ios , 只有一个 std::ios std::iostream 基地,因此只有一个内部缓冲区。

摘自 C++2011 年 2 月 11 日草案:

§ 27.6.3

The class template basic_streambuf serves as an abstract base class for deriving various stream buffers whose objects each control two character sequences:
— a character input sequence;
— a character output sequence.

§ 27.7.2

namespace std {  
template <class charT, class traits = char_traits<charT> >
class basic_istream : virtual public basic_ios<charT,traits> {

§ 27.7.3

namespace std {  
template <class charT, class traits = char_traits<charT> >
class basic_ostream : virtual public basic_ios<charT,traits> {

关于c++ - basic_streambuf::setbuf 应该设置哪个缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8144347/

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