#remove #pointers #chains #long #macro

upa

宏,用于消除创建长指针链的麻烦

1 个不稳定版本

0.1.0 2023年3月22日

#16#chains

MIT 许可证

3KB

Upa

宏,用于消除创建长指针链的麻烦。

安装

[dependencies]
upa = "0.1.0"

用法

struct Foo {
    bar: *mut Bar,
}

struct Bar {
    quz: *mut Quz,
}

struct Quz {
    tau: *mut Tau,
}

struct Tau {
    val: i32,
}

use upa::p;

fn main() {
    let mut t = Tau { val: 1337 };
    let mut q = Quz { tau: &mut t };
    let mut b = Bar { quz: &mut q };
    let f: *mut Foo = &mut Foo { bar: &mut b };

    unsafe {
        let wow = p!(f->bar->quz->tau->val);
        assert_eq!(wow, 1337);
    }
}

lib.rs:

Upa - 消除创建长指针链麻烦的宏。

没错,你不会再在 unsafe 代码中看到这种东西:(*(*(*(*p).a).b).c).d

#
#
#
fn main() {
    let mut t = Tau { val: 1337 };
    let mut q = Quz { tau: &mut t };
    let mut b = Bar { quz: &mut q };
    let f: *mut Foo = &mut Foo { bar: &mut b };

    unsafe {
        let wow = p!(f->bar->quz->tau->val);
        assert_eq!(wow, 1337);
    }
}

备注:标识符是 -> 之间允许的唯一项目。.

无运行时依赖