関数オーバーロードの頁で、引数の型が違う同名の関数を定義でき、引数型によって呼ぶ関数を変化させることができた・・・。
しかし仮に、内部の処理が引数型以外に変わらなかったら、複数定義するのは無駄である・・・。
内部が同じでありながら引数型が違う場合、そしてあらゆる型を引数に取れる場合はテンプレート関数を使うといい・・・。
引数型が違っても内部が同じ処理という都合のいい関数はなかなか作るのは難しい気もするが、参照の頁で作ったswap関数の内部処理は代入だけなので、あらゆる型を引数に取れる・・・。
宣言はこんな感じ・・・。
Tは任意の仮の型名で別にTでなくてもいい・・・。また、typenameの代わりにclassを使ってもいい・・・。
定義は、
宣言と定義が離れてる場合は両方template~のくだりをつけないといけない・・・。
内部ではTを自由に使うことができる・・・。これが実際に引数のところに変数やオブジェクトが渡されたとき、その変数の型やそのオブジェクトのクラスとして処理されるのである・・・。
でmain関数では、
int型a, bとchar型ch_x, ch_yの値を交換前に出力し、
a, bをswap、つづいて、ch_x, ch_yをswapする・・・。
a, bならTはintとして、ch_x, ch_yならTはcharとして処理される・・・。
で交換後の値を出力する・・・。
$ ./template_function before: a = 10, b = 20 before: ch_x = X, ch_y = Y after: a = 20, b = 10 after: ch_x = Y, ch_y = X $
intでもcharでもswapできてる・・・。
Sample/template_function.cpp at master · bg1bgst333/Sample · GitHub