我正在序列化我的类层次结构,并且我想要求它们都实现序列化功能。
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
。这让我觉得我的设计中有些地方是错误的。
要求属于同一继承链的两个类实现特定的虚拟函数的正确方法是什么?