我试图在编译时计算 Rust 过程宏(派生宏)内的一组常量的最大值。
宏看起来像:
fn get_max_len() -> TokenStream {
// Each TokenStream represents a constant expression
let len: Vec<TokenStream> = get_constant_lengths();
quote! {
// #(#len),* gets expanded to #len[0], #len[1], #len[2]...
const LEN: usize = std::cmp::max(#(#len),*);
}
}
问题是它std::cmp::max
是一个函数,因此不能在常量表达式中使用(至少直到const fn
稳定 - 如果可能的话,我想保持稳定的 Rust)。
如何在编译时计算一组常量的最大值?
我也许可以编写一个max!
基本上以if
递归方式构造一个巨大的 s 链的宏,但我希望那里有一个更清洁的解决方案。