我读过关于c++的自定义流,但似乎通常人们继承std::streambuf
, std::istream
和std::ostream
。通过检查这些类型的声明,可以清楚地看出它们是用于字符的:
typedef basic_streambuf<char> streambuf;
文档确认:
输入流对象可以从序列中读取和解释输入字符。
显然,这是有道理的。我想知道为其他类型实现流的正确方法是什么。我不希望允许文本,但其他形式的二进制输入/输出(我有特定的格式)。显而易见的步骤似乎是继承上面的basic
变体(basic_streambuf
、basic_istream
和basic_ostream
),并使用我认为合适的任何类型作为模板参数。我没能确定这是正确的程序。是吗?
编辑澄清:我有一个类称为片段。这些流将发送/接收段,并且仅通过WiFi连接发送/接收段,因为这些是在通信协议中使用的。发送其他信息会破坏协议。这意味着流不支持其他类型。
这不是从std::basic_*
继承非char
类型的问题的答案。但是根据评论和给定您的应用程序,我质疑是否需要为您的Segment
类型重新实现整个标准流机制,当您可以简单地使用流操作符定义一个类时:
class SegmentStream
{
public:
SegmentStream& operator<< ( const Segment& s );
}
更好的是,你可以通过定义方法send
和recv
而不是>>, <<
来澄清你的代码。或者你可以解释为什么这是不够的,为什么你特别想使用标准流?