.net - gcroot 集合 - 元素访问

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

我正在搭建从 .NET 到 C++ 的桥梁,并将 Collection 用作公共(public)元素,如下所示:

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

我正在使用 gcroot,因为我的 C++ 类不是托管的(它是 MFC),但我在访问它时遇到了问题。当我在做的时候:

Devices[x]->devicename

我有错误:

Error 6 error C2676: binary '[' : 'gcroot' does not define this operator or a conversion to a type acceptable to the predefined operator

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

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

最佳答案

虽然成员访问运算符 -> 被重载,但下标运算符 [] 似乎没有被重载,解开你的 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];

关于.net - gcroot 集合 - 元素访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7470612/

相关文章:

c++ - FFTW 和 CUFFT 输出之间的差异

c++ - 具有获取和释放语义的互锁操作(多平台)

java - 当达到阈值时,LinkedHashMap 是否也会treeifyBin/treefybucket?

c# - 编辑集合(SortedSet)中的项目(字符串)C#

C# 指针、迭代器和泛型

c# - Entity Framework 上下文验证

.net - 将文本添加到绑定(bind)的 TextBlock

.Net - 尝试将位图转换为 JPEG 时出现参数异常

c++ - 我如何更有效地插入 std::map

c# - 从 .NET 中的同一对话框中选择文件或文件夹