如何从 istream、ostream 正确继承我的类?

  • 本文关键字:继承 istream ostream c++
  • 更新时间 :
  • 英文 :


嗯,一般来说,目标是在函数中可以转移我的类的对象或cout | cin。

MyStream mout = MyStream();
MyStream min = MyStream();
...
static int UShowTFileList(ostream& out, istream& in);
...
UShowTFileList(cout, cin);
UShowTFileList(mout,min);

显而易见的解决方案不起作用。没有构造函数。

class MyStream : public ostream, public istream {...}
...
MyStream mout = MyStream();
MyStream min = MyStream();
...
-->
Error (active)  E1790   the default constructor of "MyStream" cannot be referenced -- it is a deleted function

好吧,所有的挑战也是如此。

mout << "Hello, world!" << "n";
->
Error   C2280   'MyStream::MyStream(const MyStream &)': attempting to reference a deleted function

一般来说,如何正确地继承 istream、ostream? MyStream.h

您遇到的问题是std::istreamstd::ostream都没有空构造函数,它们都需要std::streambuf*参数。因此,Mystream不能有默认的构造函数,则必须编写一个。std::fstreamstd::stringstreamstd::streambufstd::filebufstd::stringbuf的相关子类来做到这一点。我建议你也提供一个 streambuf 子类。

请注意,您也可以从std::iostream继承,这已经是一个组合的输入/输出流。另请注意,我提到的所有这些名称都是std::basic_*<char, std::char_traits<char>>的类型别名,您可以轻松地概括为template <Char = char, Traits = std::char_traits<Char>> class MyStream : std::basic_iostream<Char, Traits>{ ... }

最新更新