問題一覧に戻る
上級高度な型
問題101: constジェネリクス

constジェネリクスはコンパイル時定数を型パラメータとして使用できる機能です。配列サイズや数値定数を型レベルで抽象化でき、ゼロコストで柔軟な型を作成できます。従来は特定のサイズ([T; 32]など)ごとに実装が必要でしたが、constジェネリクスにより任意のサイズに対応可能。コンパイル時に全てが解決されるため、実行時オーバーヘッドはありません。

// 配列ラッパー
struct ArrayWrapper<T, N: > {
data: [T; N],
}

impl<T, const N: usize> ArrayWrapper<T, N> {
// newメソッド
fn new(data: ) -> Self {
Self { data }
}

// 長さを返すメソッド
fn len(&self) -> {
N
}
}

fn main() {
let arr1 = ArrayWrapper::new([1, 2, 3]);
let arr2 = ArrayWrapper::([true, false]);

println!("arr1 length: {}", arr1.len());
println!("arr2 length: {}", arr2.len());
}