Привязка Rust Vec<[T; N]> на C++ с помощью cxxC++

Программы на C++. Форум разработчиков
Anonymous
Привязка Rust Vec<[T; N]> на C++ с помощью cxx

Сообщение Anonymous »

Я пишу оболочку Rust для библиотеки C++, используя cxx.
Одним из часто встречающихся типов данных в этой библиотеке являются векторы переменного размера, где каждый элемент представляет собой вектор фиксированного размера. размер - например. вектор N-длины, содержащий N трехмерных точек, каждая из которых состоит из трех двойников.
Глядя на поддерживаемые cxx привязки, кажется, что очевидным способом является что-то вроде приведенного ниже: привязка Век на ржавчину::Vec:

Код: Выделить всё

// main.rs
include!("include/foo.h");
#[cxx::bridge]
pub mod ffi {

unsafe extern "C++" {
fn foo(x: Vec);
}
}

Код: Выделить всё

// foo.h
void foo(rust::Vec x);

Однако это приводит к следующей ошибке:

Код: Выделить всё

  error[cxxbridge]: unsupported element type of Vec
┌─ src/main.rs:17:19
│
17 │         fn foo(x: Vec);
│                   ^^^^^^^^^^^^^ unsupported element type of Vec
Решения, которые работают, но не идеальны:
  • Создание общей структуры, например Point3D и используя Vec
    . Раздражает, потому что для каждого варианта мне понадобится новая структура. Это также не совсем чисто, потому что (в случае с 3D-точками) у меня уже есть типы данных в Rust и C++ для представления точек, поэтому этот тип действительно используется только в мосте.
  • Сведение в Vec и последующее преобразование в какой-либо тип Rust. Хорошо, если это единственный способ, но это выглядит немного запутанно.
Я надеялся, что будет более чистый способ, прежде чем я начну повторять этот шаблон для всех различных методов, которые мне нужно охватить в моей оболочке.

Подробнее здесь: https://stackoverflow.com/questions/786 ... -using-cxx

Вернуться в «C++»