有时我有一个变量,我想用变量的类型调用'turbofish'函数。例如:
fn main() {
let arr = [0u8; 4];
println!("size_of arr: {}", std::mem::size_of::< TYPE_OF(arr) >());
}
当然,TYPE_OF()
不存在。因此,我最终不得不手动对类型进行硬编码:
println!("size_of arr: {}", std::mem::size_of::< [u8;4] >());
如果可以获取变量的类型(在编译时,而不是在运行时),那肯定会很好,所以我不需要自己对类型进行硬编码。
对于您的特定示例,std
中已经存在一个函数,用于根据类型的值获取类型的大小; std::mem::size_of_val
:
println!("size_of arr: {}", std::mem::size_of_val(&arr));
通常,如果要将类型变量绑定到类型,则可能需要在函数主体中执行此操作。例如,如果size_of_val
不存在,则可以执行以下操作:
fn main() {
fn size_of_val<T>(_: &T) -> usize {
std::mem::size_of::<T>()
}
let arr = [0u8; 4];
println!("size_of arr: {}", size_of_val(&arr));
}