我如何从标准流中导出自己的流

How can I derive my own stream from a standard stream?

本文关键字:自己的 标准      更新时间:2023-10-16

如何从标准流中派生自己的流?

在C#语言中,有一个Stream类,但C++的流太复杂了。

我想要这样的东西:

class my_stream : public std::stream
{
  // How to derive?
};
void using_a_stream(std::stream* s)
{
  *s << "Hello world";
}
void main()
{
  std::stream s1;
  std::fstream s2("C:\test.txt");
  my_stream s3;
  using_a_stream(&s1);
  using_a_stream(&s2);
  using_a_stream(&s3);
}

注意:该代码只是一个示例,可能是无效的C++程序。谢谢

我认为这个问题有三个层次的答案:

第1级:它很复杂,尤其是如果你是C++的新手,请立即停止。只有当你觉得有冒险精神时,才可以继续升级到2级。

第2级:使用一些库,使创建流更容易。我建议使用Boost.IOStreams库。它使创建自己的流和streambufs变得更加容易。如果您仍然不满意,请继续升级到第3级。

第3级:您必须从std::streambuf派生并修改其行为以满足您的需求。然后,您必须将streambuf插入自己的流中。

你能描述一下你自己的streamclass应该做什么吗?仅仅问how而不问what并不是获得建设性答案的最佳方式。

也许您应该看看boost::iostream,因为有一种更简单、更安全的方法可以编写自己的iostream类。

不要。

iostreams是一个糟糕的接口。它也缺乏很多功能,性能也很差。

  • C格式的I/O函数(printf、sprintf等)是否比IOStream更受欢迎?如果是,为什么
  • C程序员开始编写C++的坏习惯是什么
  • 我应该在C++代码中使用printf吗
  • 在C++中使用C特性是一种不好的做法吗
  • 部分截断C中的流(fstream或ofstream)++