我希望继承std::basic_streambuf
来实现基于TCP连接的流缓冲区。我并不完全理解指针eback, gptr, egptr, pbase, pptr, epptr
的作用。我在想一个流缓冲区作为一个实体,只是让你从流中读取字符或将字符写入流,并可能重新定位读/写指针(不是我的情况)。这些指针对我来说没有意义,因为我正在考虑为输入和输出实现一个循环缓冲区(所以它可能是例如gend < gbeg
)。我是否真的必须实现这些指针(eback, gptr
等...),或者我可以将它们全部设置为nullptr
并且一切都能正常工作?或者有一些功能可以使用它们?
答案 0 :(得分:3)
(首先,很高兴看到制作TCP streambuf而不是TCP流的决定。)
Angelika Langer&amp;除了the book之外,Klaus Kleft对此非常了解,这里是a whole section of tutorials。
但是,streambufs通常涉及大量的样板代码,因此,对于像你这样的实际问题,我会使用boost::iostreams,特别是source
(对于源tcp流) ;显然用另一种方式使用target
。
注意这个类如何抽象出你提到的低级操作。你基本上需要实现
std::streamsize read(char* s, std::streamsize n);
它将为您完成剩下的工作(没有太多开销)。
关于使用循环缓冲区的(合理的发声)想法,您可以使用boost::circular_buffer
。或者,请参阅this question。