Rust で動的ディスパッチを行うための dyn Trait

// 著作権 2025 Google LLC
// SPDX-License-Identifier: Apache-2.0

pub trait Trait {}

impl Trait for i32 {}
impl Trait for String {}

fn main() {
    let int: &dyn Trait = &42i32;
    let string: &dyn Trait = &String::from("Hello dyn!");;
}
  • 動的ディスパッチはオブジェクト指向プログラミングにおける手法であり、型が 何であるかよりも、その型の振る舞いをより重視する必要がある場面でよく使 われます。

    OOP 言語では、動的ディスパッチは多くの場合 暗黙的な プロセスであり、 それを使わないという選択はできません。

    Rust では dyn Trait を使います。これは動的ディスパッチに明示的に参加 する形式です。

  • dyn 互換 な任意のトレイトについて、そのトレイトを実装する値への参照 を dyn Trait 値へ型強制できます。

  • これらを トレイトオブジェクト と呼びます。その型はコンパイル時には 分かりませんが、その振る舞い、つまりトレイト自体によって定義されるもの は分かっています。

  • OOP スタイルの異種データ構造が 必要な 場合は、Box<dyn Trait> を使え ますが、まずは同種でジェネリクスベースに保つことを試してください!