2007年05月16日

C++のforeachが混乱中?

先日Boost 1.34.0がリリースされました。
1.33が2005年の夏だったから久しぶりな気がします。

私的に今回の目玉と言えばTR1でしょう。http://ja.wikipedia.org/wiki/Technical_Report_1

今までTR1を完全に実装しているのがDinkumwareだけだったので、1.34のTR1実装が楽しみです。今までboost::shared_ptrだったのが晴れてstd::tr1::shared_ptrと書けるようになります。
って余計名前長くなってないか?将来的にはstd::shared_ptrになるのか?
まあ名前はともかく正式に「標準」を名乗れるのは良いことです。

1.34でもう一つ気になるのはNew LibrariesのBOOST_FOREACHとやらです。
まず名前が怪しい。全部大文字だからマクロ?と思ったらやっぽりマクロ。そもそもテンプレート&ジェネリックプログラミングの最先端を行っているBoostで何故マクロ?あと名前空間も無視してBOOST_なんて名前だし。
それくらい便利でありリスクもあるということを名前で啓示しているのかも。

そもそも問題の根本は、他の言語には標準でついているforeachがC++に実装されていないということにあるのかもしれません。
STLのアルゴリズムを使えばfor_eachは使えるのですが、実際に使うには関数やファンクタを使わなければ意味がなく、そしてややこしいです。

// 敵を全て描画
std::for_each( v.begin(), v.end(), std::mem_fun_ref(Enemy::draw) );

mem_fun_refという名前がまた読みにくく理解しにくいです。この辺りの歴史的経緯はEffective STLの41項に書いてありますが、実に建て増し住宅的に実装されてきたのだなと実感します。そして引数が使えなかったりと使い勝手も悪かったりします。
そこで登場したのがboost::mem_fnです。これは今回のTR1に含まれているので、こっちが標準化されればstd::mem_fun_refの存在価値がなくなる気もするのですがどうでしょう?

posted by 鶴 at 20:42| Comment(0) | TrackBack(0) | プログラム系

2007年05月04日

吾妻峡

P1020180.JPGP1020192.JPG

新緑の吾妻峡。川原湯温泉駅から歩いてすぐの場所です。
このあたりはなかなかの絶景が続くのですが、八ッ場ダムの建設によって、あと数年でこの景色もダムの底に消えてしまうとのこと。うーん残念。
posted by 鶴 at 00:00| Comment(0) | TrackBack(0) | 日記