如何获取变量的类型,以便可以调用turbofish函数?

有时候我有一个变量,我想用变量的类型来调用一个“ 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] >());

如果我可以获取变量的类型(在编译时,而不是在运行时),那肯定会很好,因此我不需要自己对类型进行硬编码。

winner418 回答:如何获取变量的类型,以便可以调用turbofish函数?

对于您的特定示例,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));
}
本文链接:https://www.f2er.com/3167753.html

大家都在问