【问题标题】:How to get the type of a variable so I can call a turbofish function?如何获取变量的类型,以便调用 turbofish 函数?
【发布时间】:2019-11-04 09:54:53
【问题描述】:

有时我有一个变量,我想用变量的类型调用一个“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::mem::size_of_val(&amp;arr)处理。而且我敢打赌,对于您能想到的大多数其他示例,都有更好的选择。
  • @BenjaminLindley 这应该是答案。由于 Rust 会在可能的情况下推断类型,因此模糊问题没有意义,只有极少数特定情况需要处理,比如这个。

标签: generics types rust


【解决方案1】:

对于您的特定示例,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));
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-10
    • 2022-01-03
    • 2012-07-03
    • 2016-12-03
    • 2018-08-15
    相关资源
    最近更新 更多