Я думаю, что вы хотите сделать эти возвращаемые значения ссылками вместо значений. Если это так, вы можете иметь getStream
в базовом классе, возвращающем ios&
, тогда у вас могут быть определенные функции, возвращающие fstream&
, ifstream&
и ofstream&
s, потому что они ковариантны с ios&
:
class FileIOBase
{
...
bool open(const std::string &path);
bool isOpen() const;
void close();
virtual ios& getStream() = 0;
...
};
class InputFile : FileIOBase
{
size_t read(...);
ifstream& getStream();
};
class OutputFile : FileIOBase
{
size_t write(...);
ofstream& getStream();
};
class InputOutputFile : virtual InputFile, virtual OutputFile
{
fstream& getStream();
};