【问题标题】:C Abstract Data Type in RustRust 中的 C 抽象数据类型
【发布时间】:2016-06-14 09:56:25
【问题描述】:

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

typedef struct _game* Game;

现在我正在从 Rust 到 FFI:

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

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

pub struct Game(usize);

【问题讨论】:

标签: c rust ffi abstract-data-type


【解决方案1】:

您通常使用指向空枚举的指针在 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” crate,其中包含与库的低级 FFI 绑定。这是 Cargo 文档中的 described 约定。

【讨论】:

    猜你喜欢
    • 2019-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多