Передача std :: vector из собственного C ++ в управляемый массив в C ++ / CLI и / или C #

Я пытался найти способ передать std :: vector из собственного кода C ++ в статический метод в управляемом классе C ++ / CLI. Я новичок в C ++ (неуправляемый), поэтому неудивительно, что мне с этим не повезло. Я бы хотел несколько указателей на то, как std: vector (любого типа, но желательно double или int) может быть преобразован в управляемые массивы C ++ / CLI и / или массивы C #. Возможно, это невозможно, поскольку я вижу только примеры обратного (например, C # на собственный C ++), например, см. "преобразовать System :: array в std :: vector". Ниже я резюмирую свои неудачные попытки.

Я могу передать двойной вектор, например

   vector<vector<double> > dblvec

в метод, определенный в собственном классе C ++ (где класс находится в проекте C ++ / CLI), но не в метод, определенный в классе ref (также в проекте C ++ / CLI). Компилятор жалуется, что метод (в классе ref) не существует (функция-кандидат недоступна). Я думаю, это как-то связано с тем, что vector> вынужден быть частной переменной (см., Например, Ошибка интерфейса командной строки C ++ C3767: функции-кандидаты недоступны).

Любая помощь будет принята с благодарностью.


person dandar    schedule 13.03.2012    source источник


Ответы (1)


Да, вы, по сути, правы в отношении причины (собственные типы не являются общедоступными за пределами сборки). И вы не можете легко это исправить, поскольку шаблонные типы не могут быть опубликованы (даже с использованием прагмы make_public).

Для обходного пути прочтите следующее: Лучшее решение для ошибки компилятора C2158: make_public не поддерживает собственные типы шаблонов

Удачи!

person Matt Smith    schedule 13.03.2012
comment
Большое спасибо, Мэтт, за очень быстрый ответ. Я действительно ценю это. Обходной путь, который вы предлагаете, был разработан вами, поэтому я думаю, вы хороший человек, от которого можно получить совет! Я посмотрю на ваш обходной путь завтра и посмотрю, смогу ли я его понять и заставить его работать в моей ситуации. - person dandar; 13.03.2012