Одним из часто встречающихся типов данных в этой библиотеке являются векторы переменного размера, где каждый элемент представляет собой вектор фиксированного размера. размер - например. вектор 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