5个版本
0.2.0 | 2021年12月21日 |
---|---|
0.1.4 | 2021年12月17日 |
558 在 内存管理
每月37次下载
14KB
219 行
type_erased_vec
此crate提供了一个名为TypeErasedVec的单个结构体,正如其名称所示,它是一个类型擦除的Vec。
当你知道它的类型时,可以使用TypeErasedVec::get或TypeErasedVec::get_mut获取切片或Vec。
动机
当与Rust外部世界(例如GPU)通信时,它通常需要一个原始缓冲区和某种类型的描述符。
在Rust中有两种方法来表示这一点:
Vec<u8>
+ 类型描述符。Vec<T>
.
第一个选项不吸引人,因为Vec<u8>
不能安全地用作Vec<T>
,因此我们失去了修改缓冲区的能力。
第二个选项使所有包含该缓冲区的类型都泛型于T
,当T
必须在运行时确定时,这是不可行的。例如,可以从磁盘上的3D模型文件中加载缓冲区,该文件包含传递给3D渲染器的类型信息。
示例
use type_erased_vec::TypeErasedVec;
let mut vec = TypeErasedVec::new::<i32>();
let mut vec_mut = unsafe { vec.get_mut() };
for i in 0..10 {
vec_mut.push(i);
}
assert_eq!(*vec_mut, (0..10).collect::<Vec<_>>());