Tengo problemas para implementar IEnumerable<T>
en mi clase de colección personalizada en C++/CLI. Aquí está la parte correspondiente del código:Implementación de IEnumerable <T> en C++/CLI
using namespace System::Collections::Generic;
ref class MyCollection : IEnumerable<MyClass^>
{
public:
MyCollection()
{
}
virtual IEnumerator<MyClass^>^ GetEnumerator()
{
return nullptr;
}
};
Cuando compilado, esto se traduce en los siguientes errores:
error c2392: 'del sistema :: Colecciones :: :: Genérico IEnumerator ^ MiColeccion :: GetEnumerator (void) ': covariante vuelve tipos no son apoyado en tipos administrados, de lo contrario 'del sistema :: Colecciones :: IEnumerator ^ Sistema :: Colecciones :: :: IEnumerable GetEnumerator (void)' se aplicaría, error C3766: 'MiColeccion' debe proporcionar una implementación de la interfaz método 'del sistema :: Colecciones :: IEnumerator ^ Sistema :: Colecciones :: :: IEnumerable GetEnumerator (void)'
Esto tiene sentido, ya IEnumerable<T>
deriva de IEnumerable
. Sin embargo, no estoy seguro de cómo solucionar este error de compilación. Si se trataba de C#, me implícitamente implemento IEnumerable
, sin embargo no estoy seguro de cómo hacerlo en C++/CLI (si eso es posible) así:
class MyCollection : IEnumerable<MyClass>
{
public MyCollection()
{
}
public IEnumerator<MyClass> GetEnumerator()
{
return null;
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
Si hago añadir una implementación de IEnumerable::GetEnumerator()
, el compilador se queja de dos métodos que difieren solo por el tipo de devolución (que también tiene sentido).
Entonces, ¿cómo implemento IEnumerable<T>
en una clase de C++/CLI?
relacionada http://stackoverflow.com/questions/3609967/c-cli-is-overloading-on-return-type-only-possible –