gcroot Collection - 元素访问

时间:2011-09-19 12:01:44

标签: .net c++ collections c++-cli command-line-interface

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

gcroot<System::Collections::ObjectModel::Collection<BModel::Device ^> ^> Devices;

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

Devices[x]->devicename

我有错误:

  

错误6错误C2676:二进制'[':'gcroot'没有定义这个   运算符或转换为预定义可接受的类型   操作

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

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

1 个答案:

答案 0 :(得分:6)

当成员访问运算符->重载时,看起来好像下标运算符[]不是,首先打开gcroot

using namespace System::Collections::ObjectModel;
Collection<BModel::Device ^> ^d = Devices;
d[0] //... this should work

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

static_cast<Collection<BModel::Device ^> ^>(Devices)[0];