More C++ Idioms

先週末は、友人と一緒に本を読んでいたのだが、その中で C++ソースコードが出てきた。

私は、オブジェクト指向C++ から学んだ世代なので C++ソースコードを読んでいると郷愁を感じる。

しかし、いまもう一度読むと C++ はなかなか難しいというか、書くべきことが多い言語だな、と思い直した。

今日、ふと C++ を勉強しなおそうと思って検索してみたら
More C++ Idioms
がみつかった。

ここには、97種類も C++ のいろいろなイディオムが紹介されている。

いろいろと見て勉強してみたが、覚えているものもあるし、知らなかったテクニックもある。ここ数年間はそれほど C++ の知識をブラッシュアップしていなかったので、最近のモダンな C++ 向けのテクニックなどについては改めて勉強になった。

とはいえ、C++ は書かなければならない量が多い。

簡単な例だが、単純な足し算を行う Functor を定義するだけで、

#include 

class plus_binded {
private:
  int #
public:
  plus_binded(int &n) : num(n) {}
  int operator()(int n) { return num+n; }
};

int main() {
  plus_binded plus = plus_binded(10);
  cout << plus(5); // 15 を表示
  return 0;
}

となる。Functor の定義だけで7行だ。コーディング規約が {} を1行にすることが認めていない場合は10行以上にもなりうる。
(もちろんこの例であれば、std::bind1st などでもっと短く実現できるが)

ほかにも Pimpl (Bridge, Handle Body とも呼ばれる)パターンを実現するために、何十行もコードを書き続ける単純作業に耐えなければならなかったりとかして、耐え難かった。
Pimpl イディオムに関連した単純作業では、Java や C# ではそもそも必要なくなり、大きく楽になったと感じたものだった。

とはいえ、C++ は昔大変お世話になった言語なので本格的に使う機会はもうないかもしれないが、C++0x など今後も新しい仕様についても追いかけていきたいと思う。