我有一个返回IEnumerable
的接口,我想在VC ++ / CLI中实现它,因为数据来自第三方非托管DLL。
到目前为止,我有:
public ref class MyEnumerable : IEnumerable<SomeType^> {
public:
virtual IEnumerator<SomeType^>^ GetEnumerator();
}
但是编译器抱怨C2393:&#34;托管类型不支持Covariant返回类型&#34;。
这是否意味着我无法在C ++中实现IEnumerable
,还是有解决方法?
答案 0 :(得分:4)
Yikes,这是一个非常笨拙的错误信息。 真正抱怨的是缺少非泛型System :: Collections :: IEnumerable :: GetEnumerator()方法的实现。您必须实现它,因为通用IEnumerable&lt;&gt; interface继承非泛型的。在.NET 2.0中首次添加泛型时,有些东西是有意义的,而不是今天。我们有点坚持.NET 1.x的遗产。
当你激活你的秘密解码器环时很容易做到,让它看起来像这样:
public ref class MyEnumerable : IEnumerable<SomeType^> {
public:
virtual IEnumerator<SomeType^>^ GetEnumerator();
private:
virtual System::Collections::IEnumerator^ GetEnumerator1x()
= System::Collections::IEnumerable::GetEnumerator {
return GetEnumerator();
}
};