16个版本

0.5.9 2023年8月16日
0.5.8 2023年3月30日
0.5.7 2022年4月29日
0.5.6 2020年12月29日
0.2.1 2017年3月22日

#127 in FFI

Download history 68816/week @ 2024-03-14 69920/week @ 2024-03-21 64007/week @ 2024-03-28 68160/week @ 2024-04-04 66043/week @ 2024-04-11 72315/week @ 2024-04-18 81139/week @ 2024-04-25 84039/week @ 2024-05-02 74308/week @ 2024-05-09 68422/week @ 2024-05-16 64491/week @ 2024-05-23 82995/week @ 2024-05-30 70866/week @ 2024-06-06 90854/week @ 2024-06-13 82628/week @ 2024-06-20 72329/week @ 2024-06-27

330,694 每月下载量
用于 276 个crate(2个直接使用)

MIT/Apache

13KB
236

rust-cpp - 直接在Rust中嵌入C++代码

Documentation

概述

rust-cpp是一个构建工具和宏,允许你在Rust代码中内联编写C++代码。

let name = std::ffi::CString::new("World").unwrap();
let name_ptr = name.as_ptr();
let r = unsafe {
    cpp!([name_ptr as "const char *"] -> u32 as "int32_t" {
        std::cout << "Hello, " << name_ptr << std::endl;
        return 42;
    })
};
assert_eq!(r, 42)

该crate还帮助通过自动实现trait(如Drop、Clone等)将一些C++类暴露给Rust。

cpp_class!{
    #[derive(PartialEq)]
    unsafe struct MyClass as "std::unique_ptr<MyClass>"
}

使用方法

有关使用信息和详细文档,请参阅cpp crate模块级别的文档

cxx crate的差异

此crate允许在Rust函数中“内联”编写C++代码,而使用cxx crate时,您必须编写一些样板代码才能调用在不同的.cpp文件中声明的函数。

当尝试调用C++库并且可能需要调用许多小的代码片段时,内联C++代码可能很有帮助。否则,编写和维护不同地方的大量小函数的样板代码可能很繁琐。

这些crate也可以一起使用。该cxx crate提供了一些有用的类型,如CxxString,也可以与这个crate一起使用。

cxx桥接器执行更多类型检查,可以避免某些类型的错误。而此crate只能检查大小和对齐。

依赖

~295–730KB
~18K SLoC