【初心者歓迎】C/C++室 Ver.34【環境依存OK】
■ このスレッドは過去ログ倉庫に格納されています
0505デフォルトの名無しさん
2007/02/04(日) 13:44:19標準だけではどうしようもないから、そうするしかないと思う。
もしBoostを使ってよければこんなこともできる。
#include <map>
#include <iostream>
#include <functional>
#include <algorithm>
#include <boost/bind.hpp>
#include <boost/iterator/transform_iterator.hpp>
struct Value {
void MemFunc() { std::cout << "call\n"; }
};
int main() {
typedef std::map<int, Value> hoge_map;
hoge_map m;
m.insert(hoge_map::value_type());
std::for_each(
boost::make_transform_iterator(m.begin(), boost::bind(&hoge_map::value_type::second, _1)),
boost::make_transform_iterator(m.end(), boost::bind(&hoge_map::value_type::second, _1)),
std::mem_fun_ref(&Value::MemFunc));
}
transform_iteratorは、*演算子での参照時、指定した関数オブジェクトを適用するというもの。
ここでは、bindでpairからValueの方を取り出す関数オブジェクトを指定しているので、
このtransform_iteratorは、*で参照するとValue型のオブジェクトが取り出せるようになっている。
■ このスレッドは過去ログ倉庫に格納されています