1 个不稳定版本
0.1.0 | 2023年3月22日 |
---|
#16 在 #chains
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);
}
}
备注:标识符是 ->
之间允许的唯一项目。.