Коллекция gcroot - элемент доступа - PullRequest
3 голосов
/ 19 сентября 2011

Я создаю мост из .NET в C ++ и использую Collection как открытый элемент, подобный этому:

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

Я использую gcroot, потому что мой класс c ++ не управляется (это MFC), но у меня проблемы с доступом к нему. Когда я делаю:

Devices[x]->devicename

У меня ошибка:

Ошибка 6, ошибка C2676: двоичный файл '[': 'gcroot' не определяет это оператор или преобразование в тип, приемлемый для предопределенного оператор

Так что, я думаю, я должен как-то получить доступ к элементу коллекции, но не с помощью следующих скобок: []

Итак, как получить доступ к элементу коллекции gcroot clr?

1 Ответ

6 голосов
/ 19 сентября 2011

Несмотря на то, что оператор доступа к элементу -> перегружен, создается впечатление, что оператор подстрочного индекса [] не является, сначала разверните 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];
...