1. ホーム
  2. c++

[解決済み] C++でいうところの単相化とは?

2023-04-05 23:01:27

質問

Dave Hermanの最近の講演 で、Rust はこのプロパティを C++ から借用したと言っていました。このトピックの周辺には何も見つかりませんでした。どなたか、単相化が何を意味するのか説明していただけませんか?

どのように解決するのですか?

単形化とは、一般的な関数を特殊化したものを生成することです。任意のペアの最初の要素を抽出する関数を書くとしたら

fn first<A, B>(pair: (A, B)) -> A {
    let (a, b) = pair;
    return a;
}

で、この関数を2回呼び出す。

first((1, 2));
first(("a", "b"));

コンパイラは2つのバージョンの first() を生成します。一つは整数のペアに特化したもの、もう一つは文字列のペアに特化したものです。

この名前は、プログラミング言語の用語である「ポリモーフィズム」(1つの関数で多くの種類のデータを扱うことができる)に由来しています。 単形化とは、多相コードから単相コードへの変換のことです。