Так как вы также попросили объяснения
transform_iterator
должен знать тип возвращаемого значения вызываемой функции, чтобы создать его экземпляр. Это определяется через result_of
(находится в <boost/utility/result_of.hpp>
Если вы используете функциональный объект, вам нужно определить член result_type
, чтобы указать тип результата объекта. (поскольку у объекта нет «возвращаемого типа» как такового)
Если бы вы использовали обычную функцию, result_of
смог бы разобраться в этом самостоятельно, например ::
template <typename K, typename V>
const V & get_value(std::pair<K, V> const & p) { return p.second; }
class test
{
typedef map<int, float> TMap;
TMap mymap;
public:
typedef boost::function< const TMap::mapped_type & (const TMap::value_type &) > F;
typedef boost::transform_iterator<F, TMap::iterator> transform_iterator;
transform_iterator begin()
{
return boost::make_transform_iterator(mymap.begin(), &get_value< int, float >);
}
};