我定义了一个 Cloneable 接口:
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;平台:Windows XP 和 Vista