Абстрагирование функции-члена с различными типами возвращаемых значений - PullRequest
2 голосов
/ 19 декабря 2011

Если у меня есть следующие классы 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 () часть интерфейса и переместить его в FileIOBase?

1 Ответ

3 голосов
/ 19 декабря 2011

Я думаю, что вы хотите сделать эти возвращаемые значения ссылками вместо значений. Если это так, вы можете иметь 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();
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...