gcroot Collection - 元素访问

cnd*_*cnd 4 .net c++ collections c++-cli command-line-interface

我正在建立从.NET到C++的桥梁,并使用Collection作为这样的公共元素:

gcroot<System::Collections::ObjectModel::Collection<BModel::Device ^> ^> Devices;
Run Code Online (Sandbox Code Playgroud)

我正在使用gcroot因为我的c ++类没有被管理(它是MFC)但是我在访问它时遇到了麻烦.我在做的时候:

Devices[x]->devicename
Run Code Online (Sandbox Code Playgroud)

我有错误:

错误6错误C2676:二进制'[':'gcroot'未定义此运算符或转换为预定义运算符可接受的类型

所以我想我必须以某种方式访问​​集合元素,但不能使用这个括号:[]

那么如何访问gcroot clr集合元素呢?

Joh*_*ren 8

当成员访问运算符->被重载时,看起来好像下标运算符[]不是,打开你的gcroot第一个.

using namespace System::Collections::ObjectModel;
Collection<BModel::Device ^> ^d = Devices;
d[0] //... this should work
Run Code Online (Sandbox Code Playgroud)

上面代表一个隐式演员(这就是你不能使用的原因auto).static_cast如果您需要单行,您可以使用:

static_cast<Collection<BModel::Device ^> ^>(Devices)[0];
Run Code Online (Sandbox Code Playgroud)