rust / intermediate
Snippet
Const Generics für Null-Kosten-Abstraktion
Const Generics erlauben Compile-Zeit-Konstanten als generische Parameter. Anders als Typparameter, die Typen akzeptieren, akzeptieren Const-Parameter Compile-Zeit-Konstanten wie Integer-Literale. Dies ermöglicht das Erstellen wirklich generischer Container, deren Größe zur Compile-Zeit bestimmt wird, mit null Runtime-Overhead.
snippet.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
struct Matrix<T, const N: usize, const M: usize> {data: [[T; M]; N],}impl<T, const N: usize, const M: usize> Matrix<T, N, M>whereT: Default + Copy,{fn new() -> Self {Self { data: [[T::default(); M]; N] }}}fn main() {let m: Matrix<i32, 2, 3> = Matrix::new();println!("Matrix size: {}x{}", 2, 3);}
Erklärung
1
const N: usize, const M: usize
Deklariert const generische Parameter N und M vom Typ usize für Dimensionen
2
data: [[T; M]; N]
Erstellt ein 2D-Array vom Typ T mit Dimensionen N x M, alles zur Compile-Zeit bekannt
3
where T: Default + Copy,
Erfordert, dass T Default-constructible und Copy für Stack-basierte Speicherung ist
4
[[T::default(); M]; N]
Erstellt Array durch Wiederholen des Default-Werts M mal für N Zeilen
5
let m: Matrix<i32, 2, 3> = Matrix::new();
Erstellt eine 2x3 Matrix mit spezifischen Compile-Zeit-Dimensionen