首页 > 解决方案 > 如何将可以为空的原始指针转换为选项?

问题描述

我写了以下宏:

macro_rules! ptr_to_opt {
    ($p: expr) => {
        if $p.is_null() {
            None
        } else {
            Some($p)
        }
    };
}

这使我可以检查 a 中的原始指针match

match ptr_to_opt!(myRawPtr) {
    Some(ptr) => { ... },
    None      => { ... },
}

是否有任何内置功能可以替换我的ptr_to_opt宏?


编辑:

在将指针转换为引用的意义上,这个问题与这个问题不同as_ref,而我想保留指针。

标签: pointersrustoptionalnullable

解决方案


是的,您可以使用NonNull::new从. 如果你只想要一个(你可能不需要考虑它可以做指针可以做的所有事情),那么你可以用.Option<NonNull<T>>*mut TOption<*mut T>NonNullNonNull::as_ptr


推荐阅读