【问题标题】:C++/CLI: Is overloading on return type only possible?C++/CLI:是否只能重载返回类型?
【发布时间】:2010-08-31 14:26:49
【问题描述】:

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

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

根据this thread。这种重载在 C++ 中是被禁止的,因为它只依赖于返回类型。

现在,我想在 C++/CLI 中使用 ICloneable 来做这件事。有什么办法吗?

【问题讨论】:

    标签: .net c++-cli overloading


    【解决方案1】:

    这种类型的重载在 C# 中是允许的,不是因为返回类型不同,而是因为接口的显式实现 - ICloneable.Clone

    关于 C++/CLI 看这里:http://msdn.microsoft.com/en-us/library/ms235235%28VS.80%29.aspx

    【讨论】:

    • 是的,我必须找出它被称为“显式覆盖”。
    【解决方案2】:

    我终于找到了办法:

    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); }
    

    【讨论】:

      【解决方案3】:

      在 C++ 中,您可以省略第二行,C++ 允许覆盖中的协变。由于X Clone()object ICloneable::Clone()的合约兼容,所以可以直接放到v-table中,不需要转发函数。

      【讨论】:

      • 你确定吗?这实际上是两种不同的方法。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-09
      • 1970-01-01
      • 2013-07-29
      • 1970-01-01
      • 2012-03-23
      相关资源
      最近更新 更多