ジェネリックプログラミング
ジェネリック(総称あるいは汎用)プログラミング (generic programming)はデータ形式に依存しないコンピュータプログラミング方式。これはデータ型でコードをインスタンス化するのか、あるいはデータ型をパラメータとして渡すかということにかかわらず、同じソースコードを利用できるということである(※http://msdn.microsoft.com/msdnmag/issues/05/04/PureC/Pure C++:Generic Programming Under .NETStanley B. LippmanマイクロソフトMSDNマガジン2008年12月28日)。ジェネリックプログラミングは言語により異なる形で実装されている。ジェネリックプログラミングの機能は70年代にCLUAdaのような言語に搭載され、次にBETAC++DEiffelJava、そして今はなきDECTrellis/Owl言語などの数多くのオブジェクトベース(object-based)およびオブジェクト指向(object-oriented)言語に採用された。1995年の書籍デザインパターンの共著者は(Ada、Eiffel、Java、C#の)ジェネリクスや、(C++の)テンプレートとしても知られるパラメータ化された型(parameterized types)としてジェネリクスについて触れている。これらは、型を指定することなく、型を定義できるようにする(型は使用する時点で引数として与えられる)。このテクニック(特にデリゲーションを組み合わせるとき)は非常に強力であるが、同時に「動的に、高度にパラメーター化されたソフトウェアはより静的なソフトウェアよりも理解しづらい」とその著者は忠告している(Gang of Four 1995:21)。

1 概要
2 Adaのジェネリクス
 Adaの例
 利点と制限
3 C++のテンプレート
 技術概要
 テンプレートの特殊化
 長所と短所
4 D言語のテンプレート
 Static-if
 エイリアスパラメーター
5 Javaのジェネリクス
 ワイルドカード
 制約
6 Haskellのジェネリックプログラミング
 PolyP
 ジェネリックHaskell
 「決まり文句を捨てる」アプローチ
7 C#と.NETのジェネリックプログラミング
8 その他の言語のジェネリックプログラミング機能
9 脚注
10 関連項目