ac-library-rs::modintでDynamicModIntのIdを複数定義する
DefaultIdと同じやり方だとconst fn default()が公開されていないせいで怒られてしまう
code:rs
// ダメなやり方
pub enum MyId {}
impl Id for MyId {
fn companion_barrett() -> &'static ac_library::modint::Barrett {
// Barret::default ではなく Default::default が参照されてしまい、 const じゃない関数は static の初期化に使えません!!と怒られる
static BARRETT: ac_library::modint::Barrett = ac_library::modint::Barrett::default();
&BARRETT
}
}
const fn new(m: u32)は公開されているのでうまくいく
code:rs
// うまくいく方
pub enum MyId {}
impl Id for MyId {
fn companion_barrett() -> &'static ac_library::modint::Barrett {
// 適当な初期値 (998244353) で初期化
static BARRETT: ac_library::modint::Barrett = ac_library::modint::Barrett::new(998_244_353);
&BARRETT
}
}