Я пытаюсь вычислить максимальное значение набора констант во время компиляции внутри процедурного макроса 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, но яЯ надеюсь, что есть более чистое решение.