小编Bri*_*ian的帖子

将 Option<&mut T> 转换为 *mut T

我正在围绕 C 库编写一个 Rust 包装器,在这样做的同时,我试图利用The Book中提到的“可空指针优化” ,但我找不到转换为Option<&T>*const T的好方法Option<&mut T>喜欢*mut T他们所描述的内容。

\n\n

我真正想要的是能够打电话Some(&foo) as *const _。不幸的是,这不起作用,所以我能想到的下一个最好的事情是Option<T>使我能够调用Some(&foo).as_ptr(). 以下代码是该特征的工作定义和实现:

\n\n
use std::ptr;\n\ntrait AsPtr<T> {\n    fn as_ptr(&self) -> *const T;\n}\n\nimpl<\'a, T> AsPtr<T> for Option<&\'a T> {\n    fn as_ptr(&self) -> *const T {\n        match *self {\n            Some(val) => val as *const _,\n            None => ptr::null(),\n        }\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在我可以打电话Some(&foo).as_ptr()来获取一个*const _,我希望能够打电话Some(&mut foo).as_ptr()来获取一个*mut _ …

pointers ffi rust

7
推荐指数
1
解决办法
2830
查看次数

标签 统计

ffi ×1

pointers ×1

rust ×1