要知道的一件事是,C ++不允许放弃数据向量的所有权。这是C ++设计的局限性。有一些技巧,但我不建议您使用它们。为了保持“安全”,您只能借用C ++向量。
使用vector::data()
和可以很容易地做到这一点vector::size()
:
#include
#include
extern "C" void show_vector(float const *data, std::size_t size);
int main() {
std::vector 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);
}
}
阅读更多:
我可以从Rust代码调用C或C ++函数吗?
如何从原始指针获取数组或切片?