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!
基本的に s の巨大なチェーンを再帰的に構築するマクロを書くことができるかもしれませんがif
、よりクリーンな解決策があることを願っています。