gpt4 book ai didi

C++:继承 std::basic_streambuf 的问题

转载 作者:可可西里 更新时间:2023-11-01 02:39:18 32 4
gpt4 key购买 nike

我想继承std::basic_streambuf实现基于 TCP 连接的流缓冲区。我不明白指针的作用 eback, gptr, egptr, pbase, pptr, epptr .我将流缓冲区视为一个实体,它只允许您从流中读取字符或向流中写入字符,并可能重新定位读/写指针(在我的情况下不是)。这些指针对我来说没有意义,因为我正在考虑为输入和输出实现一个循环缓冲区(所以有可能,例如 gend < gbeg )。我真的必须实现那些指针( eback, gptr 等...),还是我可以将它们全部设置为 nullptr一切都会好起来的吗?或者有一些函数可以使用它们?

最佳答案

(首先,很高兴看到制作 TCP streambuf 而不是 TCP 流的决定。)

Angelika Langer 和 Klaus Kleft 在这方面有很好的资料,此外 the book , 这里是 a whole section of tutorials .

但是,streambufs 通常涉及大量样板代码,因此,对于像您这样的实际问题,我会使用 boost::iostreams , 特别是 source (对于源 tcp 流;显然使用 target 作为另一种方式)。

请注意此类如何抽象出您提到的较低级别的操作。您基本上需要实现

std::streamsize read(char* s, std::streamsize n);

它会为您处理剩下的事情(没有太多开销)。

至于您(听起来很合理)使用循环缓冲区的想法,您可以使用 boost::circular_buffer .或者,请参阅 this question .

关于C++:继承 std::basic_streambuf 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30284691/

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