C ++ / CLI: возможна ли только перегрузка возвращаемого типа? - PullRequest
1 голос
/ 31 августа 2010

Если я хорошо понимаю, в C # можно сделать

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

согласно этой теме .Этот вид перегрузки запрещен в C ++, поскольку он зависит только от типа возвращаемого значения.

Теперь я хотел бы сделать именно эту вещь с ICloneable в C ++ / CLI.Есть ли способ?

Ответы [ 3 ]

2 голосов
/ 31 августа 2010

Этот тип перегрузки допускается в C # не из-за другого типа возвращаемого значения, а из-за явной реализации интерфейса - ICloneable.Clone.

О C ++ / CLI смотрите здесь: http://msdn.microsoft.com/en-us/library/ms235235%28VS.80%29.aspx

1 голос
/ 31 августа 2010

Я наконец нашел способ:

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); }
0 голосов
/ 12 сентября 2010

В C ++ вы можете просто пропустить вторую строку, C ++ допускает ковариацию в переопределениях.Поскольку X Clone() совместим с контрактом для object ICloneable::Clone(), он может поместить его непосредственно в v-таблицу без необходимости в функции пересылки.

...