当前位置:  开发笔记 > 编程语言 > 正文

从C ++ std :: vector <float>转换为Rust Vec <f32>的最佳方法是什么?

如何解决《从C++std::vector<float>转换为RustVec<f32>的最佳方法是什么?》经验,为你挑选了1个好方法。



1> Stargateur..:

要知道的一件事是,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 ++函数吗?

如何从原始指针获取数组或切片?

推荐阅读
手机用户2502851955
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有