这就是我所说的
// some guy wrote this, used as a Policy with templates
struct MyWriter {
void write(std::vector<char> const& data) {
// ...
}
};
在一些现有的代码中,人们没有使用模板,而是使用interfaces+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 是根据 MyWriter 实现的。MyOwnClass的继承成员函数为什么不自动实现IWriter的接口?相反,用户必须编写只调用基类版本的转发函数,如
class MyOwnClass: private MyWriter, public IWriter {
public:
void write(std::vector<char> const& data) {
MyWriter::write(data);
}
};
我知道,在 Java 中,当您有一个实现接口的类并且派生自恰好具有合适方法的类时,该基类会自动实现派生类的接口。
为什么 C++ 不这样做?拥有它似乎是一件很自然的事情。