クローン可能なインターフェースを定義しました:
struct Cloneable
{
virtual Cloneable * clone(void) const = 0;
}
他にもいくつかのインターフェイスクラスがあります(問題に関係のないコンテンツ):
struct Interface
{
};
struct Useful_Goodies
{
};
上記のクラスから継承するリーフオブジェクトを作成しました。
struct Leaf : public Cloneable, public Interface, public Useful_Goodies
{
Leaf * clone(void) const // Line #1 for discussion.
{
return new Leaf(*this);
}
};
エラーが発生しました:
overriding virtual function return type differs and is not covariant from 'Cloneable::clone'
タイプをに変更するとCloneable *
、次のエラーメッセージが表示さ れます。
'return' : ambiguous conversions from 'Leaf *' to 'Cloneable *'
私の質問(すべて関連):
- リーフクラスはどのようにして
Cloneable
インターフェースの要件を解決できますか? - すべてのオブジェクトがクローン作成を実装することが保証されているクローン作成コントラクトを実装するためのより良いソリューションはありますか?
私はこのパラダイムをジェネリックプログラミング(レコード、フィールド、データベース)の一部として使用しています。
コンパイラ:MS Visual Studio 2008; プラットフォーム:WindowsXPおよびVista