如果我具有以下C++类:
class FileIOBase
{
//regular file operations
//
//virtual fstream / ifstream / ofstream getStream(); ???
//
bool open(const std::string &path);
bool isOpen() const;
void close();
...
};
class InputFile : FileIOBase
{
size_t read(...);
ifstream getStream();
};
class OutputFile : FileIOBase
{
size_t write(...);
ofstream getStream();
};
class InputOutputFile : virtual InputFile, virtual OutputFile
{
fstream getStream();
};
这些类仅封装标准的输入,输出,输入/输出文件流及其操作。
有什么方法可以使getStream()成为接口(interface)的一部分并将其移至FileIOBase吗?
最佳答案
我认为您的意思是使这些返回值引用而不是值。如果是这种情况,则可以在基类中让getStream
返回ios&
,然后可以让特定函数返回fstream&
,ifstream&
和ofstream&
,因为它们与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();
};