Почему C ++ не позволяет базовым классам реализовывать наследуемый интерфейс производного класса?

Вот о чем я говорю

<code>// some guy wrote this, used as a Policy with templates
struct MyWriter {
  void write(std::vector<char> const& data) {
    // ...
  }
};
</code>

В каком-то существующем коде люди использовали не шаблоны, а интерфейсы + стирание типа

<code>class IWriter {
public:
  virtual ~IWriter() {}

public:
  virtual void write(std::vector<char> const& data) = 0;
};
</code>

Кто-то еще хотел использовать его с обоими подходами и пишет

<code>class MyOwnClass: private MyWriter, public IWriter {
  // other stuff
};
</code>

MyOwnClass реализован в терминах MyWriter. Почему унаследованные функции-члены MyOwnClass не реализуют интерфейс IWriter автоматически? Вместо этого пользователь должен написать функции пересылки, которые ничего не делают, кроме как вызывают версии базового класса, как в

<code>class MyOwnClass: private MyWriter, public IWriter {
public:
  void write(std::vector<char> const& data) {
    MyWriter::write(data);
  }
};
</code>

Я знаю, что в Java, когда у вас есть класс, который реализует интерфейс и наследуется от класса, у которого есть подходящие методы, этот базовый класс автоматически реализует интерфейс для производного класса.

Почему C ++ не делает это? Кажется, это естественно.

Ответы на вопрос(5)

Ваш ответ на вопрос