Level 3:関数 3.4 関数の汎用性

※資料は自著より引用


■3.4 関数の汎用性

 ここからは,「関数の汎用性」をテーマに, C++で導入された関数まわりの機能を紹介していく。

関数を設計するとき,関数に汎用性を持たせることは重要である。汎用性の高い関数はそれだけで強力なツールとなる。
List 3-11 のは,int型の配列を整列(sort)する関数の定義例である(アルゴリズムは分かりやすさ優先で遅いものを使っている)。
 汎用性を考慮した点は,
  ・受け取って処理できる配列の大きさに汎用性を持たせるため,第2引数に配列の要素数を渡すようにした。
  ・昇順(ascending)にも降順(descending)にも整列できるように,第3引数に昇順か降順かを指定できるようにした。
の2点である。

なお,昇順(ascending),降順(descending)を指定するための列挙定数型を7行目で
 enum sortflag { kAscending = 1, kDescending = -1 };
と定義している。C言語の列挙型は,enum sortflag のように2単語でひとつのデータ型名を表しているため,よく
 typedef enum sortflag { kAscending = 1, kDescending = -1 } sortflag;
という具合に,typedefを使って,1単語のデータ型別名を定義していた。しかし,C++では,列挙型名にenumを
含めなくてもよくなった(含めてもかまわない)
。List 3-11では,sortflag型にenumを付けずに使用できている。
なお,この列挙型sortflagは大域領域(関数の外)で定義されているので,::演算子を付けて利用している


では,この関数に更に汎用性を追加しながら,C++で導入された関数周りの機能を紹介していこう。



次へ進む。