閑古鳥

オールドプログラマの日記。プログラミングとか病気(透析)の話とか。

フリー関数を活用しよう

なんとなく C++ を使っているとクラスを使用しなければならないと言う意識を持ってしまいがちですが (自分が) 、 C++ は別に関数を定義するのにクラスに属している必要などなく、むしろ必要が無いのならば単なる関数として実装してしまう方がむしろ良い選択だと言えます。

C++ Coding Standards―101のルール、ガイドライン、ベストプラクティス (C++ in‐depth series) ではメンバ関数よりフリー関数の方が良い理由として、特定のクラスに依存しない分結合が弱まり、また汎用性が高まるという点を挙げています。クラスのメンバになってしまうと、その関数を呼び出すのにいちいちクラスのインスタンスを生成しなければならないのでその分無駄が多いというのもありますね。

まだ読んでいないのですが (どこにも売ってないの……) 、 Effective C++ の第 3 版の目次を見るにこの本にも同様の項目があるようです。最近の流行なんでしょうかね。

自分は boost で、特定のクラスの使用を助けるヘルパ関数がフリー関数で提供されているのを見た辺りから割と積極的にフリー関数を多用するようにしています。

いまの仕事では例えば角度をラジアンに変換するような関数まで一番基幹のクラスのメンバになっていて、この処理を行いたいがためにそのクラスとは関わりの無いはずのクラスまでが関係を持ってしまったりしていて、そういうのを見つける度にフリー関数に置き換えたりしています。反面教師として見れば、このソースもまだ参考になるのかもしれないと最近は思っています。全然嬉しくありませんが。