これが私が話していることです
// some guy wrote this, used as a Policy with templates
struct MyWriter {
void write(std::vector<char> const& data) {
// ...
}
};
一部の既存のコードでは、人々はテンプレートを使用しませんでしたが、インターフェイス + 型消去を使用しました
class IWriter {
public:
virtual ~IWriter() {}
public:
virtual void write(std::vector<char> const& data) = 0;
};
他の誰かが、アプローチと書き込みの両方で使用できるようにしたいと考えていました
class MyOwnClass: private MyWriter, public IWriter {
// other stuff
};
MyOwnClass は、MyWriter の観点から実装されています。MyOwnClass の継承メンバー関数が IWriter のインターフェイスを自動的に実装しないのはなぜですか? 代わりに、ユーザーは次のように、基本クラスのバージョンを呼び出すだけの転送関数を作成する必要があります。
class MyOwnClass: private MyWriter, public IWriter {
public:
void write(std::vector<char> const& data) {
MyWriter::write(data);
}
};
Java では、インターフェイスを実装し、たまたま適切なメソッドを持つクラスから派生するクラスがある場合、その基本クラスは派生クラスのインターフェイスを自動的に実装することを知っています。
なぜC++はそれをしないのですか? 持つのは当たり前のようです。