У меня возникают проблемы с реализацией IEnumerable<T>
в моем классе пользовательской коллекции в С++/CLI. Вот соответствующая часть кода:
using namespace System::Collections::Generic;
ref class MyCollection : IEnumerable<MyClass^>
{
public:
MyCollection()
{
}
virtual IEnumerator<MyClass^>^ GetEnumerator()
{
return nullptr;
}
};
При компиляции это приводит к следующим ошибкам:
ошибка C2392: "System:: Подборки:: Общий:: IEnumerator ^ MyCollection:: GetEnumerator (аннулируются) ': Ковариантные типы возврата не поддерживается в управляемых типах, в противном случае" System:: Коллекция:: IEnumerator ^ Система:: Подборки:: IEnumerable:: GetEnumerator (аннулируются) "была бы переопределена ошибка C3766:" MyCollection "должен предоставить реализация для интерфейса метод" System:: Коллекция:: IEnumerator ^ Система:: Подборки:: IEnumerable:: GetEnumerator (аннулируются)
Это имеет смысл, так как IEnumerable<T>
происходит от IEnumerable
. Однако я не уверен, как исправить эту ошибку компиляции. Если бы это был С#, я бы неявно реализовал IEnumerable
, но я не уверен, как это сделать в С++/CLI (если это возможно):
class MyCollection : IEnumerable<MyClass>
{
public MyCollection()
{
}
public IEnumerator<MyClass> GetEnumerator()
{
return null;
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
Если я добавляю реализацию IEnumerable::GetEnumerator()
, компилятор жалуется на два метода, которые отличаются только типом возврата (что также имеет смысл).
Итак, как мне реализовать IEnumerable<T>
в классе С++/CLI?