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 的约定。
我的头文件中有这段代码:
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 的约定。