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

时间:2015-05-17 08:04:35

标签: c++ tcp stream network-programming iostream

我希望继承std::basic_streambuf来实现基于TCP连接的流缓冲区。我并不完全理解指针eback, gptr, egptr, pbase, pptr, epptr的作用。我在想一个流缓冲区作为一个实体,只是让你从流中读取字符或将字符写入流,并可能重新定位读/写指针(不是我的情况)。这些指针对我来说没有意义,因为我正在考虑为输入和输出实现一个循环缓冲区(所以它可能是例如gend < gbeg)。我是否真的必须实现这些指针(eback, gptr等...),或者我可以将它们全部设置为nullptr并且一切都能正常工作?或者有一些功能可以使用它们?

1 个答案:

答案 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