【发布时间】:2013-06-02 21:57:51
【问题描述】:
我正在序列化我的类层次结构,我想要求它们都实现序列化功能。
class Base
{
virtual void serialize(File file)
{
file << _baseMember;
}
int _baseMember;
}
class Derived : public Base
{
virtual void serialize(File file)
{
Base::serialize(file);
file << _derivedMember;
}
int _derivedMember;
}
如果我总是记得在派生类中实现序列化函数,那么一切正常,但此代码不需要定义 Derived::serialize()。
我的下一个想法是创建一个接口来要求实现serialize:
class Serializable
{
virtual void serialize(File file) = 0;
}
class Base : public Serializable { ... }
class Derived : public Base : public Serializable { ... }
但这会产生编译器警告warning: direct base 'Serializable' inaccessible in 'Derived' due to ambiguity。这让我觉得我的设计有问题。
要求属于同一继承链的两个类实现特定的虚拟函数的正确方法是什么?
【问题讨论】:
-
嗯,我不知道你是否可以那样做,使用组合怎么样?拥有可序列化对象的列表并执行他的序列化方法,或者使用调用序列化的模板方法每个派生类??,你能给这个问题一些背景吗?你想做什么?
-
当 Base aready 实现(纯)虚函数时,再次从 Serializable 继承 Derived 是没有意义的。因此,编译器会抱怨歧义。_如果模板类将当前类 Base,Derived,... 作为模板参数并且还具有纯虚方法,该怎么办。当您实现该类时,您必须实现该方法。但我担心这些是不相关的覆盖方法。至少你必须实现这样的功能。 _ 我担心没有可以使用的 C++ 语言功能。
标签: c++ inheritance interface multiple-inheritance