Ich habe Probleme bei der Implementierung IEnumerable<T>
in meiner benutzerdefinierten Sammlung Klasse in C++/CLI. Hier ist der relevante Teil des Codes:IEnumerable implementieren <T> in C++/CLI
using namespace System::Collections::Generic;
ref class MyCollection : IEnumerable<MyClass^>
{
public:
MyCollection()
{
}
virtual IEnumerator<MyClass^>^ GetEnumerator()
{
return nullptr;
}
};
Wenn kompiliert, führt dies in der folgenden Fehler:
Fehler C2392: ‚System :: Sammlungen :: Allgemeine :: IEnumerator ^ MyCollection :: GetEnumerator (void) ': covariant gibt Typen sind nicht in verwalteten Typen unterstützt, sonst 'System :: Sammlungen :: IEnumerator ^ System :: Sammlungen :: IEnumerable :: GetEnumerator (void)' außer Kraft gesetzt werden würde Fehler C3766: 'MyCollection' muss eine Implementierung für die Schnittstelle bieten Methode 'System :: Sammlungen :: IEnumerator ^ System :: Sammlungen :: IEnumerable :: GetEnumerator (void)'
Dies macht Sinn, da IEnumerable<T>
stammt von IEnumerable
. Ich bin mir jedoch nicht sicher, wie ich diesen Kompilierfehler beheben kann. Wenn diese C#, würde ich implizit IEnumerable
implementieren, aber ich bin nicht sicher, wie das in C zu tun ++/CLI (wenn das überhaupt möglich ist) wie folgt aus:
class MyCollection : IEnumerable<MyClass>
{
public MyCollection()
{
}
public IEnumerator<MyClass> GetEnumerator()
{
return null;
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
Wenn ich eine Implementierung von IEnumerable::GetEnumerator()
tun hinzuzufügen, der Compiler beklagt sich über zwei Methoden, die sich nur nach Rückgabetyp unterscheiden (was auch Sinn macht).
Also, wie implementiere ich IEnumerable<T>
in einer C++/CLI-Klasse?
Verwandte http://stackoverflow.com/questions/3609967/c-cli-is-overloading-on-return-type-only-possible –