Вот что я говорю о
// some guy wrote this, used as a Policy with templates
struct MyWriter {
void write(std::vector<char> const& data) {
// ...
}
};
В каком-то существующем коде люди не использовали шаблоны, а интерфейсы + type-erasure
class IWriter {
public:
virtual ~IWriter() {}
public:
virtual void write(std::vector<char> const& data) = 0;
};
Кто-то хочет использовать оба подхода и пишет
class MyOwnClass: private MyWriter, public IWriter {
// other stuff
};
MyOwnClass реализован в Microsoft MyWriter. Почему не унаследованные функции-члены MyOwnClass не реализуют интерфейс IWriter автоматически? Вместо этого пользователь должен писать функции пересылки, которые ничего не делают, кроме вызова версий базового класса, как в
class MyOwnClass: private MyWriter, public IWriter {
public:
void write(std::vector<char> const& data) {
MyWriter::write(data);
}
};
Я знаю, что в Java, когда у вас есть класс, реализующий интерфейс и полученный из класса, который имеет подходящие методы, этот базовый класс автоматически реализует интерфейс для производного класса.
Почему С++ не делает этого? Кажется, что это естественно.