Dlaczego C ++ nie pozwala klasom bazowym zaimplementować dziedziczonego interfejsu klasy pochodnej?

Oto o czym mówię

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

W niektórych istniejących kodach ludzie nie używali szablonów, ale interfejsy + wymazywanie typów

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

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

Ktoś inny chciał być użyteczny w obu podejściach i pisać

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

MyOwnClass jest zaimplementowany w kategoriach MyWriter. Dlaczego odziedziczone funkcje składowe MyOwnClass nie implementują interfejsu IWriter automatycznie? Zamiast tego użytkownik musi pisać funkcje przekazywania, które nic nie robią, ale wywołują wersje klasy bazowej, jak w

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

Wiem, że w Javie, gdy masz klasę, która implementuje interfejs i wywodzi się z klasy, która ma odpowiednie metody, ta klasa bazowa automatycznie implementuje interfejs dla klasy pochodnej.

Dlaczego C ++ tego nie robi? Wydaje się, że to naturalne.

questionAnswers(5)

yourAnswerToTheQuestion