我正在建立从.NET到C ++的桥梁,并使用Collection作为这样的公共元素:
gcroot<System::Collections::ObjectModel::Collection<BModel::Device ^> ^> Devices;
我正在使用gcroot因为我的c ++类没有被管理(它是MFC)但是我在访问它时遇到了麻烦。当我在做的时候:
Devices[x]->devicename
我有错误:
错误6错误C2676:二进制'[':'gcroot'没有定义这个 运算符或转换为预定义可接受的类型 操作
所以我想我必须以某种方式访问集合元素,但不能使用这个括号:[]
那么如何访问gcroot clr集合元素?
答案 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];