Следует знать, что C ++ не позволяет передавать права собственности на вектор данных. Это ограничение дизайна C ++. Есть несколько трюков , но я не советую их использовать. Чтобы оставаться «в безопасности», вы можете заимствовать только вектор C ++.
Это можно легко сделать, используя vector::data()
и vector::size()
:
#include <cstddef>
#include <vector>
extern "C" void show_vector(float const *data, std::size_t size);
int main() {
std::vector<float> vec{10, 20};
show_vector(vec.data(), vec.size());
}
Сторона Rust может использовать slice::from_raw_parts()
, создавая представление о нашем векторе, не вступая во владение.
use libc::{c_float, size_t};
extern "C" fn show_vector(data: *const c_float, size: size_t) {
let vec = unsafe { std::slice::from_raw_parts(data, size) };
for x in vec {
println!("{}", x);
}
}
Подробнее: