クラス階層をシリアライズしていますが、両方にシリアライゼーション関数を実装するよう要求したいと考えています。
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
。これは、私のデザインの何かが間違っていると感じさせます。
同じ継承チェーンの一部である 2 つのクラスが仮想の特定の関数を実装することを要求する適切な方法は何でしょうか?