Pointers 如何将可以为null的原始指针转换为选项?
我编写了以下宏:Pointers 如何将可以为null的原始指针转换为选项?,pointers,rust,optional,nullable,Pointers,Rust,Optional,Nullable,我编写了以下宏: macro_rules! ptr_to_opt { ($p: expr) => { if $p.is_null() { None } else { Some($p) } }; } 这允许我检查匹配中的原始指针: match ptr_to_opt!(myRawPtr) { Some(ptr) => { ... }, None =&
macro_rules! ptr_to_opt {
($p: expr) => {
if $p.is_null() {
None
} else {
Some($p)
}
};
}
这允许我检查匹配中的原始指针
:
match ptr_to_opt!(myRawPtr) {
Some(ptr) => { ... },
None => { ... },
}
是否有任何内置功能可将我的ptr\u替换为\u opt
宏
编辑:
这个问题与
as_ref
将指针转换为引用的意义不同,而我希望保留指针。是的,您可以使用从*mut
获取选项。如果您只需要一个选项
(您可能不需要考虑非空
可以做指针可以做的任何事情),那么您可以使用它进行映射。是的,您可以使用从*mut
中获取选项
。如果您只需要一个选项
(您可能不需要考虑非空
可以做指针可以做的任何事情),那么您可以映射它。因此,5个月后,我找到了两种不同的解决方案
首先:使用原始指针的方法。在Ok
中,将返回一个引用而不是指针,但在某些情况下,引用可以隐式转换为指针,因此在某些情况下它可以工作
秒:以下功能:
use std::ffi::c_void;
pub fn ptr_as_opt(ptr: *mut c_void) -> Option<*mut c_void> {
if ptr.is_null() {
None
} else {
Some(ptr)
}
}
使用std::ffi::c_void;
发布fn ptr_as_opt(ptr:*mut c_void)->选项{
如果ptr.is_null(){
没有一个
}否则{
一些(ptr)
}
}
因此,5个月后,我找到了两种不同的解决方案
首先:使用原始指针的方法。在Ok
中,将返回一个引用而不是指针,但在某些情况下,引用可以隐式转换为指针,因此在某些情况下它可以工作
秒:以下功能:
use std::ffi::c_void;
pub fn ptr_as_opt(ptr: *mut c_void) -> Option<*mut c_void> {
if ptr.is_null() {
None
} else {
Some(ptr)
}
}
使用std::ffi::c_void;
发布fn ptr_as_opt(ptr:*mut c_void)->选项{
如果ptr.is_null(){
没有一个
}否则{
一些(ptr)
}
}
这是否回答了您的问题?“这个问题不同于这个问题,因为as_ref将指针转换为引用,而我想保留指针。”你可以在指针完成工作后将引用转换回指针,尽管如果指针悬空,这是UB,或者到未初始化的内存。@Masklin然后使用ptr\u-to\u-opt
是一个更干净的选项,因为不涉及强制转换。我们回到我问题的开头,这回答了你的问题吗?“这个问题不同于这个问题,因为as_ref将指针转换为引用,而我想保留指针。”你可以在指针完成工作后将引用转换回指针,尽管如果指针悬空,这是UB,或者到未初始化的内存。@Masklin然后使用ptr\u-to\u-opt
是一个更干净的选项,因为不涉及强制转换。我们回到我问题的开头。