rab*_*ens 4 .net c++-cli visual-c++
我有一个返回 的接口IEnumerable,我想在 VC++/CLI 中实现它,因为数据来自第三方非托管 DLL。
到目前为止我有:
public ref class MyEnumerable : IEnumerable<SomeType^> {
public:
virtual IEnumerator<SomeType^>^ GetEnumerator();
}
Run Code Online (Sandbox Code Playgroud)
但编译器抱怨 C2393:“托管类型不支持协变返回类型”。
这是否意味着我无法IEnumerable在 C++ 中实现 s,或者有解决方法吗?
哎呀,这是一个非常笨拙的错误消息。它真正抱怨的是缺少非泛型 System::Collections::IEnumerable::GetEnumerator() 方法的实现。您必须实现它,因为泛型 IEnumerable<> 接口继承了非泛型接口。当泛型首次添加到 .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();
}
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
121 次 |
| 最近记录: |