Как правильно унаследовать istream / ostream?

338
31 мая 2017, 06:24

Ну вообщем цель такова, чтобы в функцию можно было передать либо обьект моего класса, либо же 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

Answer 1

Насколько я понимаю, всё что требуется от аргументов out и in функции UShowTFileList --- чтобы у них были операторы << и >> соответственно. Возможным решение может быть не наследование MyStream от ostream и istream, а превращении функции UShowTFileList в шаблонную:

template<typename Ostream, typename Istream>
static int UShowTFileList(Ostream &out, Istream &in);
READ ALSO
Конвертер функции с возвращаемым типом T в функцию с возвращаемым типом string

Конвертер функции с возвращаемым типом T в функцию с возвращаемым типом string

Пытался написать функцию, которая делает то, что указано в заголовке:

299
Visual Studio 2017 C++ LNK2019 unresolved external symbol

Visual Studio 2017 C++ LNK2019 unresolved external symbol

ЗдравствуйтеИмеется вот такая иерархия:

499
Регулярное выражение в С++

Регулярное выражение в С++

Не могу понять почему не работает следующий кодВ res всегда false

237