今日ちょっと会社の人にboostのlambdaのコードを見せて何をしてるコードかわかる?って聞いた見た。


こんなの。

using namespace boost::lambda;

std::vector v;
v.push_back(7);
v.push_back(6);
v.push_back(5);
v.push_back(4);
v.push_back(3);
v.push_back(2);
v.push_back(1);

std::cout << *std::find_if(v.begin(), v.end(), _1 < 5) << std::endl;

ちなみに出力結果は以下

4

結果、わかると答えた人は1名。
その人はboostの存在は知っていたみたいだけど読みやすいよね?って聞いたら読みやすくはないかもってw
他の人はみんなうーん、わかんないってw
まず、cout への 「<<」ビットシフトしてるところがわからないって。
確かにC言語の知識でみたらビットシフトだからストリームに入力する時に使う演算子だとは思わないよねー。
find_ifについても何してるのかわからないって言うのと_1は何が入るのかもわからないと。。。
C++0xではこう書けるようになる。

std::cout << *std::find_if(v.begin(), v.end(), [](int x) -> bool { return x < 5; }) << std::endl;

関数オブジェクトの bool operator(int x)が定義されてると思えばこのコーディングスタイルでも見慣れればわかりやすくなるかなと思う。