如果我理解得很好,在C#中可以做到
public class X : ICloneable
{
public X Clone() { ... }
object ICloneable.Clone() { return Clone(); } // This calls the above
}
根据this thread。在C ++中禁止这种重载,因为它只取决于返回类型。
现在,我想在C ++ / CLI中使用ICloneable
执行此操作。有办法吗?
答案 0 :(得分:2)
C#中允许这种类型的重载不是因为返回类型不同,而是因为接口的显式实现 - ICloneable.Clone
。
关于C ++ / CLI请看:http://msdn.microsoft.com/en-us/library/ms235235%28VS.80%29.aspx
答案 1 :(得分:1)
我终于找到了办法:
public ref class X : public ICloneable
{
virtual System::Object^ Clone2() sealed = ICloneable::Clone;
public:
X(X const&); // Traditional C++ copy constructor
X^ Clone();
};
System::Object^ X::Clone2() { return this->Clone(); }
X^ X::Clone() { return gcnew X(*this); }
答案 2 :(得分:0)
在C ++中你可以省略第二行,C ++允许覆盖中的协方差。由于X Clone()
与object ICloneable::Clone()
的合同兼容,因此可以将其直接放入v-table而无需转发功能。