#array #pointers #ptr #bounded #type-id #pointer-array

ptr-array

基于TypeId的有限指针数组

2个版本

0.1.1 2022年4月30日
0.1.0 2022年4月29日

#14 in #type-id

Apache-2.0

12KB
236

基于TypeId的指针数组。


lib.rs:

一个堆栈数组存储 &T 或 &mut T 作为 ([TypeId], *const/mut ()),可以在没有完全控制其参数的情况下用于函数调用时传递引用。

示例

// a determined function that you can't modify for arbitrary argument.
fn bar(_arg1: (), mut arg2: PointerArray<'_>) {
    // remove &mut Vec<String> from array.
    let arg3 = arg2.remove_mut::<Vec<String>>().unwrap();
    assert_eq!("arg3", arg3.pop().unwrap());
}

let ptr_array = PointerArray::new();

let mut arg3 = vec![String::from("arg3")];

// insert &mut Vec<String> to array. on Ok(_) the array itself would be returned with
// reference successfully inserted.
let ptr_array = ptr_array.insert_mut(&mut arg3).unwrap();

// pass the array as argument to bar.
bar((), ptr_array);

无运行时依赖