2024/8/12(月)

関連型という概念を知った。Rust、Haskell、Swiftなどにおいて、型が自分に結び付いた型を持てるという話らしい。名前が分かりにくいが、こんなもんメンバ変数メンバ関数のノリでメンバ型でいいだろ。

具体的な使い道だが、インタフェースがクラスにメソッド(メンバ関数)の実装を要請するように、RustのtraitやSwiftのprotocolはクラスに関連型の実装を要請できる。それでその制約を満たす型ならなんでも受け取るという関数などを定義し、関連型を利用するといった利用方法がとれるらしい。

利用方法を聞くと大層便利そうだし、なんで今まで知らなかったのだろうと思ったが、C++の抽象クラスはメンバ関数を強制できても関連型にあたるようなusing宣言(型エイリアス)の実装は強制できない。テンプレートでやった場合、実装クラスの定義を利用側に晒すことになる。その辺の問題があってC++だと選択肢に上がりにくかったのだと思う。


ゲーム制作ライブラリの開発を進めた。IDで管理しているリソースだが、std::anyとかを使うのも選択肢のひとつかもしれないと思い始めた。

Categories: