Почему 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 ++ не делает это? Кажется, это естественно.