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 日

#71 in #c

Download history • Rust 包仓库 68536/week @ 2024-03-14 • Rust 包仓库 69631/week @ 2024-03-21 • Rust 包仓库 63719/week @ 2024-03-28 • Rust 包仓库 67840/week @ 2024-04-04 • Rust 包仓库 65762/week @ 2024-04-11 • Rust 包仓库 72049/week @ 2024-04-18 • Rust 包仓库 80833/week @ 2024-04-25 • Rust 包仓库 83789/week @ 2024-05-02 • Rust 包仓库 74020/week @ 2024-05-09 • Rust 包仓库 68201/week @ 2024-05-16 • Rust 包仓库 64276/week @ 2024-05-23 • Rust 包仓库 82781/week @ 2024-05-30 • Rust 包仓库 70531/week @ 2024-06-06 • Rust 包仓库 90434/week @ 2024-06-13 • Rust 包仓库 82111/week @ 2024-06-20 • Rust 包仓库 71980/week @ 2024-06-27 • Rust 包仓库

329,050 每月下载量
用于 261 个包 (通过 cpp)

MIT/Apache

39KB
753

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)

该包还可以通过自动实现如 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