自定义类型的自定义C ++流

时间:2015-10-03 02:05:16

标签: c++ c++11 stream

我已经了解了C ++的自定义流,但似乎人们通常会继承std::streambufstd::istreamstd::ostream。通过检查这些类型的声明,很明显这些声明适用于角色:

typedef basic_streambuf<char>        streambuf;

The docs确认一下:

  

输入流对象可以读取和解释来自序列的输入   字符。

显然,这是有道理的。我想知道为其他类型实现流的正确方法是什么。我不想允许文本,但其他形式的二进制输入/输出(我有特定的格式)。明显的步骤似乎是继承上述basicbasic_streambufbasic_istream的{​​{1}}变体,并使用我认为适合的任何类型作为模板参数。我没有找到确认这是正确的程序。那么,是吗?

编辑以澄清:我有一个名为Segment的类。这些流将通过WiFi连接发送/接收段和仅段,因为这些在通信协议中使用。发送任何其他内容都会破坏协议。这意味着流不支持其他类型。

1 个答案:

答案 0 :(得分:0)

对于从std::basic_*继承非char类型的问题,这不是对您的问题的回答。但是,根据评论并给出了您的应用程序,我在质疑是否需要重新实现Segment类型的整个标准流机制,当您只需使用流运算符定义类时:

class SegmentStream
{
public:

    SegmentStream& operator<< ( const Segment& s );
}

更好的是,您可以通过定义方法sendrecv而不是>>, <<来澄清您的代码。 或者也许您可以解释为什么这不够,为什么您特别想使用标准流?