boost の中でも変態度高めの lambda を使ってみた。いまどきの PC ならそんなにコンパイルが遅くはならないかな、と。
引っかかったのは、関数オブジェクト(ファンクタ)の引数に対して、そのメンバ関数を呼ぶには、lambda::bind を使わないといけなさそうなところ(多分)。
#include <algorithm> #include <string> #include <boost/lambda/lambda.hpp> #include <boost/lambda/bind.hpp> using namespace boost::lambda; void test() { std::find_if(itemlist.begin(), itemlist.end(), (bind(&Item::getName, _1) == "aho")); }
あと、& を付けないといけなかったり(こっちは、VC++2005 ならエラーメッセージで親切に教えてくれた)。