問題一覧に戻る
上級ジェネリクス
問題100: GATs(ジェネリック関連型)

ジェネリック関連型は関連型がライフタイムや型に対してジェネリックになることを可能にします。これにより貸与イテレータや非同期トレイトのようなより強力な抽象化が可能になります。GATsは単純な関連型と完全なジェネリックパラメータのギャップを埋めます。ゼロコスト抽象化を維持しながら型間の複雑な関係を表現するのに重要です。Rust 1.65で安定化されました。

// ジェネリック関連型
trait Container {
type Item: Clone;

fn get<'a>(&'a self, key: &str) -> Self::Item<>;
}

// GATの実装
struct MyContainer {
data: String,
}

impl Container for MyContainer {
type Item<'a> = ;

fn get<'a>(&'a self, _key: &str) -> {
&self.data[..]
}
}

fn main() {
let c = MyContainer {
data: "GATs!".to_string(),
};

let item = c.("key");
println!("{}", item);
}