32 个版本
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.0.12 | 2015 年 11 月 19 日 |
#16 in FFI
336,316 每月下载量
用于 262 个包 (39 个直接)
22KB
175 行
rust-cpp - 在 Rust 中直接嵌入 C++ 代码
概述
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)
该包还帮助通过自动实现 trait(如 Drop、Clone(如果 C++ 类型可以复制)等)将一些 C++ 类暴露给 Rust。
cpp_class!{
#[derive(PartialEq)]
unsafe struct MyClass as "std::unique_ptr<MyClass>"
}
用法
有关用法信息和深入文档,请参阅 cpp
包模块级文档。
与 cxx
包的区别
此包允许你在 Rust 函数中编写“内联”C++ 代码,而使用 cxx
包时,你必须编写一些样板代码,以便调用在不同 .cpp
文件中声明的函数。
当尝试调用 C++ 库并希望进行大量对小型代码片段的调用时,内联 C++ 代码可能很有帮助。否则,编写和在不同的地方维护许多小型函数的样板代码可能很麻烦。
这些包也可以一起使用。 cxx
包提供了一些有用的类型,如 CxxString
,也可以与此包一起使用。
cxx
桥接器执行更多的类型检查,可以避免一些错误类。而此包只能检查大小和对齐。
依赖关系
~0.9–1.5MB
~29K SLoC