Overriding istream get(char)



我正在实现一些非常具体的I/O流,其中之一是只有有时才有数据可用的输入流(想象一下在打开时轮询数据的某种套接字)。我的流基于继承自basic_iostream的类,并在内部使用继承自basic_filebuf的缓冲区。因此,当调用underflow时,我的filebuf有一种特殊的方式来表示没有可用的数据。我觉得这是个好主意,因为严格来说这不是EOF,除非通道真的关闭了。这个状态基本上是在说"现在没有数据,但是通道是开放的,所以你可以继续询问,它最终可能会到达"。

问题是traits_type::eof()get(char)函数内检查,这并不完全像它应该被覆盖(也许我错了)。

但是,无论如何——发送这种状态信号的最佳方式是什么?如果发生这种状态,我将知道它在我的缓冲区的下流方法…

对于这个建议,您可以使用用户定义的char_traits,并将其作为模板参数到您的basic_filebuf,即:

#include <fstream>
#include <limits>
struct my_char_traits : public std::char_traits<char> 
{
typedef std::char_traits<char>::int_type int_type;
static constexpr int_type eof() noexcept 
{
return std::numeric_limits<int_type>::min();
}
};
class my_buff: std::basic_filebuf<char, my_char_traits>
{
};

最新更新