如何解决来自静态和可变的 C 指针的 Rust 引用?
我正在用 Rust 编写一个 C 接口库。我的 API 非常类似于 C:我将“不透明”指针作为函数参数,我必须将其转换为指向库内部结构的指针。所以指针的生命周期比函数调用(静态)更长,指针指向可变数据(库负责初始化和获取/设置这些数据)。可变性 + 静态数据隐含地是 API 的一部分,但在 rust 中,我在说明这一点时遇到了麻烦(我认为只是语法)。
代码如下:
struct Real_attr { ... }
pub extern "C" fn attr_init(attr: *mut attr_ptr) -> cty::c_int {
let p : *mut Real_attr = attr.cast::<Real_attr>();
let r : &mut Real_attr = p.as_ref::<'static'>().unwrap();
...
}
42 | p.as_ref::<'static>()
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ types differ in mutability
|
= note: expected enum `Option<&'static mut Real_attr>`
found enum `Option<&'static Real_attr>`
但我不明白如何“强制转换”或以其他方式指定该引用是可变的,在 static 出现语法错误后添加 mut
..
解决方法
如果你想要一个可变引用,你正在寻找 as_mut
。
let r : &mut Real_attr = p.as_mut::<'static>().unwrap();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。