C ++ / CLI:只能在返回类型上重载吗?

时间:2010-08-31 14:26:49

标签: .net c++-cli overloading

如果我理解得很好,在C#中可以做到

public class X : ICloneable
{
    public X Clone() { ... }
    object ICloneable.Clone() { return Clone(); } // This calls the above
}

根据this thread。在C ++中禁止这种重载,因为它只取决于返回类型。

现在,我想在C ++ / CLI中使用ICloneable执行此操作。有办法吗?

3 个答案:

答案 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而无需转发功能。