Rust不直接支持此功能,C ++函数符号修饰是实现定义的,因此Rust需要很多支持才能处理此功能。这不是不可能,但可能不会发生。
但是,Rust声称支持C语言。这显然更容易支持,因为它“仅”需要支持C的函数调用。这也是实现定义的行为,但这并没有太大变化,人们同意一起共享相同的约定,因此使用C作为通用平台上的中介,您将没有问题。
因此,要从Rust调用C ++,必须通过C。
要从Rust调用C,文档将显示以下示例:
extern "C" {
fn abs(input: i32) -> i32;
}
fn main() {
unsafe {
println!("Absolute value of -3 according to C: {}", abs(-3));
}
}
Run Code Online (Sandbox Code Playgroud)
从C,C ++函数必须等来定义称之为C ++ 这样:
// This C++ function can be called from C code
extern "C" void handler(int) {
std::cout << "Callback invoked\n"; // It can use C++
}
Run Code Online (Sandbox Code Playgroud)
将此示例转换为Rust中的示例,可以得到:
#include <cstdlib>
#include <cinttypes>
extern "C" std::int32_t abs(std::int32_t n) {
return std::abs(static_cast<std::intmax_t>(n));
}
Run Code Online (Sandbox Code Playgroud)