「テンプレート (プログラミング)」の版間の差分
削除された内容 追加された内容
m 関連項目: テンプレートメタプログラミング |
|||
19行目:
cout << max(3, 7); //7が出力される
</source>
ここで、Tで表されているものを''テンプレート・パラメータ''という。
コンパイラは実引数として与えられた値の型(''テンプレート引数''。この例の場合では、この整数型リテラルの型である int)からTに対応する型を''導出''し、Tに得られたintを当てはめて関数を''実体化''する。
このようにして実体化された関数を''特殊化''(あるいは特殊化版、特殊バージョン)という。例の max(3, 7) に対してはこの特殊化がコールされることになる。
この場合xとyがどんな型でも「x < y」という式が生成される。また
逆に標準ライブラリにある[[複素数]]を表す型のcomplexには<演算子が定義されていない。複素数には強い順序付けが存在しないからである。そのためmax(x, y)という呼出はxとyが複素数の場合コンパイルエラーになる。このように<演算子を必要とするテンプレートでcomplexを使用することはできない。困ったことにこの種のエラーでは難解なエラーメッセージが出力されてしまう。そのためテンプレートが関わるエラーを出さないよう仕様をよく確認する方が良い。
|