問題一覧に戻る
中級ジェネリクス
問題51: ジェネリック型

ジェネリック型を使うと、複数の型に対して動作する構造体や関数を定義できます。'<'T'>'のように山括弧で型パラメータを指定し、使用時に具体的な型が決まります。implブロックでも同様に型パラメータを宣言します。コードの再利用性が高まり、型安全性を保ちながら柔軟なプログラムが書けます。

// ジェネリック構造体
struct Pair<> {
first: T,
second: T,
}

// ジェネリック列挙型
enum Option2<> {
Some(T),
None,
}

// ジェネリック実装
impl<> Pair<> {
fn new(first: T, second: T) -> Self {
Self { first, second }
}

fn swap(&mut self) {
std::mem::swap(&mut self.first, &mut self.second);
}
}

fn main() {
let mut int_pair = Pair::new(10, 20);
let string_pair = Pair::new("hello", "world");

int_pair.swap();
println!("Swapped: {} {}", int_pair.first, int_pair.second);

let opt: Option2<> = Option2::Some(42);
match opt {
Option2::Some(val) => println!("Value: {}", val),
Option2::None => println!("No value"),
}
}