Rust 中的 C 抽象数据类型

C Abstract Data Type in Rust

我的头文件中有这段代码:

typedef struct _game* Game;

现在我正在从 Rust 到 FFI:

extern "C" {
    pub type Game = usize;
}

有没有比将其视为指针大小的数字类型更安全的方法?这行得通吗:

pub struct Game(usize);

您通常使用指向空枚举的指针在 Rust 中建模抽象 C 类型:

pub enum _game {}
pub type Game = *mut _game;

这种方法明确强调了这样一个事实,即您不能自己创建 _game 的值 - 您只能从某个地方获取指向它的指针。

就是说,如果您正在为您的库编写更高级别的包装器,您应该将此 Game 包装到更高级别的 Game,如下所示:

extern crate your_library_sys;

pub struct Game(your_library_sys::Game);

这里 your_library_sys 是一个 "sys" 包,其中包含到库的低级 FFI 绑定。这是 Cargo 文档中 described 的约定。