Warum lässt C ++ Baseclasses die geerbte Schnittstelle einer abgeleiteten Klasse nicht implementieren?

Hier ist, wovon ich rede

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

In einigen vorhandenen Codes verwendeten die Benutzer keine Vorlagen, sondern Interfaces + Type-Erasure

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

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

Jemand anderes wollte sowohl mit Ansätzen als auch mit Schriften verwendbar sein

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

MyOwnClass ist in MyWriter implementiert. Warum implementieren die geerbten Member-Funktionen von MyOwnClass die Schnittstelle von IWriter nicht automatisch? Stattdessen muss der Benutzer Weiterleitungsfunktionen schreiben, die nur die Basisklassenversionen aufrufen, wie in

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

Ich weiß, dass in Java, wenn Sie eine Klasse haben, die eine Schnittstelle implementiert und von einer Klasse abgeleitet ist, die zufällig über geeignete Methoden verfügt, diese Basisklasse automatisch die Schnittstelle für die abgeleitete Klasse implementiert.

Warum macht C ++ das nicht? Es scheint eine natürliche Sache zu sein.

Antworten auf die Frage(5)

Ihre Antwort auf die Frage