首页 > 解决方案 > 有什么方法可以将常量与 Rust 中的类型相关联?

问题描述

我想关联一个在我的特征中定义的常量,并在通用函数中使用它。

trait My {
    const C: usize;
}

fn f<T>() -> [i32; T::C] where T: My {
    unimplemented!();
}

但是锈不能处理这个

https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=a2d51315ba58f92d0e29bdac32115a62

有没有其他方法可以从泛型函数的类型中获取常量?

标签: rust

解决方案


您可以使用generic_array板条箱 - 这不允许您使用固定大小的 Rust 数组,但您可以将数组长度表示为关联类型

trait My {
  type C: ArrayLength<i32>;
}

然后用 trait bound 引用它

fn f<T>() -> GenericArray<i32, T::C> where T: My {
  ...
}

然后,您还可以使用to_usize从类型中获取常量值。


推荐阅读