Чтобы сделать все это за один вызов преобразования, я думаю, что вам нужно вызвать bind для себя, потому что вам нужен функтор, который вызывает boost: bind. Это то, что я никогда не пытался. Вы бы согласились на что-то вроде этого (не проверено)?
struct GetFunc {
ClassOutput *obj;
boost::function<void(void) > operator()(const OptionsMap::value_type &v) {
return boost::bind(&ClassOutput::write_option_, obj, v);
}
GetFunc(ClassOutput *obj) : obj(obj) {}
};
transform(options.begin(), options.end(), back_inserter(callbacks_), GetFunc(this));
В C ++ 0x вы можете использовать лямбду вместо класса функтора:
transform(options.begin(), options.end(), back_inserter(callbacks_),
[this](const OptionsMap::value_type &v) {
return boost::bind(&ClassOutput::write_option_, this, v);
}
);