【发布时间】:2012-05-14 21:52:59
【问题描述】:
这就是我要说的
// 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++ 不这样做?拥有它似乎是一件很自然的事情。
【问题讨论】:
-
因为从
struct派生与从interface派生的意图不同? -
没有
virtual函数、纯规范等,这根本没有意义。停止尝试将 Java 代码剪切和粘贴到 C++ 中,并认为它会起作用。 litb 我希望比这更了解。 -
@JohannesSchaub-litb:也许其他时间。很抱歉,由于您的声誉和个人资料中的“有时我在拖钓”声明,目前我不认为您确实需要帮助(也许我弄错了)。现在我觉得这个讨论并不特别有趣。我建议检查 C++ FAQ。祝你有美好的一天。
-
@fontanini 他要求澄清。我仍然不确定你反对什么。考虑到 Johannes 或多或少地吸收了 C++ 标准,并且是该委员会或互联网上拥有最全面 C++ 知识的人之一。当他有问题时,这是一个很好的问题,不会轻易被抛到一边。
-
@Konrad:当它累积了那些反对票时,这个问题要糟糕得多。
标签: c++ class inheritance interface