#c #cxx #ffi #compiler

macro cpp_macros

Procedural macro implementation for the cpp crate

14 releases

0.5.7 Apr 29, 2022
0.5.6 Dec 29, 2020
0.5.5 Jul 12, 2020
0.5.4 Sep 6, 2019
0.2.1 Mar 22, 2017

#14 in #c-plus-plus

Download history 19191/week @ 2022-12-02 16630/week @ 2022-12-09 15033/week @ 2022-12-16 11445/week @ 2022-12-23 11996/week @ 2022-12-30 16020/week @ 2023-01-06 15262/week @ 2023-01-13 15719/week @ 2023-01-20 16400/week @ 2023-01-27 18651/week @ 2023-02-03 21243/week @ 2023-02-10 23787/week @ 2023-02-17 22449/week @ 2023-02-24 23552/week @ 2023-03-03 27220/week @ 2023-03-10 22661/week @ 2023-03-17

99,364 downloads per month
Used in cpp


757 lines

rust-cpp - Embed C++ code directly in Rust

Build status Documentation


rust-cpp is a build tool & macro which enables you to write C++ code inline in your rust code.

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)

The crate also help to expose some C++ class to Rust by automatically implementing trait such as Drop, Clone (if the C++ type can be copied), and others

    unsafe struct MyClass as "std::unique_ptr<MyClass>"


For usage information and in-depth documentation, see the cpp crate module level documentation.

Differences with the cxx crate

This crate allows to write C++ code "inline" within yout Rust functions, while with the cxx crate, you have to write a bit of boiler plate to have calls to functions declared in a different .cpp file. Having C++ code inline might be helpful when trying to call to a C++ library and that one may whish to make plenty of call to small snipets. It can otherwise be fastidious to write and maintain the boiler plate for many small functions in different places.

These crate can also be used in together. The cxx crate offer some usefull types such as CxxString that can also be used wth this crate.

The cxx bridge does more type checking which can avoid some classes of errors. While this crate can only check for equal size and alignement.


~39K SLoC