У меня есть массив данных в массиве C++/CLI, который я могу передать на нативную функцию, используя pin_ptr<T>
, без проблем. Теперь, однако, мне нужно передать массив на функцию C++/STL, которая ожидает контейнер, такой как std::array
или std::vector
.std :: array или std :: vector from pointer
Простой способ сделать это (что я сделал первым) - это скопировать элемент по элементу.
Второй способ - позвонить std::copy()
, см. Ответ на этот вопрос: convert System::array to std::vector.
Однако я хочу пропустить весь шаг копирования и вместо этого использовать указатель. Видя, как std::array
требует аргумента шаблона для определения его длины, я не могу создать его во время выполнения (но, пожалуйста, исправьте меня, если я ошибаюсь). Есть ли способ создать вектор или другой тип контейнера STL без ненужного копирования данных?
Это может сработать, но assumming, что C++/CLI имеет [System :: Массив] (https://msdn.microsoft.com/en-us/library/system.array (v = vs.110) .aspx? f = 255 & MSPPError = -2147217396 & cs-save-lang = 1 & cs-lang = cpp # code-snippet-1), это может быть не так чисто. Кроме того, у вас есть только базовые типы? Нет строк или 'ref class', которые необходимо преобразовать? Любой из этих случаев также исключает прохождение указателей. – crashmstr
Я имею дело только с структурами, которые содержат такие вещи, как int, char, float ... Так что полу-базовые типы, если хотите. –