我已经了解了C ++的自定义流,但似乎人们通常会继承std::streambuf
,std::istream
和std::ostream
。通过检查这些类型的声明,很明显这些声明适用于角色:
typedef basic_streambuf<char> streambuf;
The docs确认一下:
输入流对象可以读取和解释来自序列的输入 字符。
显然,这是有道理的。我想知道为其他类型实现流的正确方法是什么。我不想允许文本,但其他形式的二进制输入/输出(我有特定的格式)。明显的步骤似乎是继承上述basic
,basic_streambuf
和basic_istream
的{{1}}变体,并使用我认为适合的任何类型作为模板参数。我没有找到确认这是正确的程序。那么,是吗?
编辑以澄清:我有一个名为Segment的类。这些流将通过WiFi连接发送/接收段和仅段,因为这些在通信协议中使用。发送任何其他内容都会破坏协议。这意味着流不支持其他类型。
答案 0 :(得分:0)
对于从std::basic_*
继承非char
类型的问题,这不是对您的问题的回答。但是,根据评论并给出了您的应用程序,我在质疑是否需要重新实现Segment
类型的整个标准流机制,当您只需使用流运算符定义类时:
class SegmentStream
{
public:
SegmentStream& operator<< ( const Segment& s );
}
更好的是,您可以通过定义方法send
和recv
而不是>>, <<
来澄清您的代码。
或者也许您可以解释为什么这不够,为什么您特别想使用标准流?