嗯,一般来说,目标是在函数中可以转移我的类的对象或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::istream
和std::ostream
都没有空构造函数,它们都需要std::streambuf*
参数。因此,Mystream
不能有默认的构造函数,则必须编写一个。std::fstream
和std::stringstream
对std::streambuf
、std::filebuf
和std::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>{ ... }