Si verificano problemi nell'implementazione di IEnumerable<T>
nella classe di raccolta personalizzata in C++/CLI. Ecco la parte rilevante del codice:Implementazione di IEnumerable <T> in C++/CLI
using namespace System::Collections::Generic;
ref class MyCollection : IEnumerable<MyClass^>
{
public:
MyCollection()
{
}
virtual IEnumerator<MyClass^>^ GetEnumerator()
{
return nullptr;
}
};
Quando compilato, questo si traduce nei seguenti errori:
errore C2392: 'System :: Collections :: :: generico IEnumerator ^ MyCollection :: GetEnumerator (void) ': covariante ritorna tipi non sono supportati in tipi gestiti, altrimenti 'sistema :: Collezioni :: IEnumerator ^ System :: Collections :: :: IEnumerable GetEnumerator (void)' sarebbe essere sovrascritto errore C3766: 'MyCollection' deve fornire un implementazione per l'interfaccia metodo 'System :: Collections :: IEnumerator ^ System :: Collections :: IEnumerable :: GetEnumerator (vuoto)'
Questo ha senso, dato che IEnumerable<T>
deriva da IEnumerable
. Tuttavia, non sono sicuro di come correggere questo errore di compilazione. Se questo è stato C#, avrei implicitamente implementare IEnumerable
, però io non sono sicuro di come fare in C++/CLI (se è ancora possibile) in questo modo:
class MyCollection : IEnumerable<MyClass>
{
public MyCollection()
{
}
public IEnumerator<MyClass> GetEnumerator()
{
return null;
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
Se faccio aggiungere un'implementazione di IEnumerable::GetEnumerator()
, il compilatore si lamenta di due metodi che differiscono solo per il tipo restituito (che ha anche senso).
Quindi, come si implementa IEnumerable<T>
in una classe C++/CLI?
correlati http://stackoverflow.com/questions/3609967/c-cli-is-overloading-on-return-type-only-possible –