虽然这是一个简单的例子,但是我有多个泛型函数,它们需要处理几十个可能的值,实际值直到运行时才知道,因为它是作为参数提供的。
#![feature(generic_const_exprs)]
fn generic_division<const DIVISOR: u64>(denominator: u64) -> u64 {
denominator / DIVISOR
}
fn main() {
let denominator = 12;
for i in 1..5 {
let dividend = match i {
1 => generic_division::<1>(denominator),
2 => generic_division::<2>(denominator),
3 => generic_division::<3>(denominator),
4 => generic_division::<4>(denominator),
_ => panic!()
};
println!("{} / {} == {}", denominator, i, dividend);
}
}
有比上面更好的方法吗?所有其他方法都遇到了const
问题。
1条答案
按热度按时间8gsdolmq1#
当你使用
const
泛型参数时,目的是保证参数在编译时是已知的。在这里传递运行时值甚至在语法上都是不可能的。如果你想确保你的函数可以被常量折叠,并且在需要的时候也接受运行时值,你可以使用const fn
。让我们给予个例子。