任何将常量与Rust中的类型关联的方法?

时间:2019-06-01 12:55:57

标签: 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

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

1 个答案:

答案 0 :(得分:2)

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

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

然后使用特质绑定对其进行引用

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

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