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

标签 c++ c++11 stream

我读过有关 C++ 的自定义流,但似乎人们通常继承自 std::streambufstd::istreamstd: :ostream。通过检查这些类型的声明,很明显这些是针对字符的:

typedef basic_streambuf<char>        streambuf;

The docs确认这一点:

Input stream objects can read and interpret input from sequences of characters.

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

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

最佳答案

这不是关于从 std::basic_* 继承的问题的答案与非 char类型。但是根据评论并根据您的申请,我质疑是否需要为您的 Segment 重新实现整个标准流机制。类型,当您可以简单地使用流运算符定义一个类时:

class SegmentStream
{
public:

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

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

关于c++ - 自定义类型的自定义 C++ 流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32918198/

相关文章:

c - 如何使用(UART)总线在数据流和控制之间切换

c++ - 有没有办法通过引用模拟向下转换

c++ 14 vs 11 - sizeof 返回不同的值?

Delphi:TFileStream 读/写进度(不浪费性能)

javascript - 如何识别 Node.js 中的事件是从哪个流发出的

c++ - 为 std::map 中的 std::array 分配多个值

C++ 不匹配 'operator='(后缀到中缀)

c++ - 当数据包含空格时,如何将制表符分隔文件的内容加载到 C++ 中的二维字符串 vector 中?

c++ - 如何删除从 CWinThread 派生的对象

c++ - C++ 中作为右值的常量(11)