有没有办法根据泛型类型选择常量的值?
例如,类似(无效的 Rust 代码):
fn foo<T>() {
let b = match T {
u32 => 0x01234567u32,
u64 => 0x0123456789abcdefu64,
_ => panic!()
}
}
fn main() {
foo::<u32>();
foo::<u64>();
}
此函数仅设计为与 u16
、u32
和 u64
类型一起使用。
最佳答案
你可以使用一个特征的associated constant:
trait MyTrait {
const SOME_CONST: Self;
}
impl MyTrait for u32 {
const SOME_CONST: Self = 0x01234567u32;
}
impl MyTrait for u64 {
const SOME_CONST: Self = 0x0123456789abcdefu64;
}
fn foo<T>() where T: MyTrait {
let _b: T = T::SOME_CONST;
}
fn main() {
foo::<u32>();
foo::<u64>();
}
在 rust playground 上试试。
关于generics - 根据rust函数中的泛型选择常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72731166/