document_ это набор символов?
Но эта функция является функцией-членом CharStatistics!Предположительно, вы вызываете это из функции-члена CharStatistics.В этом случае вы можете использовать boost :: bind, чтобы решить эту проблему, если это разрешено:
std::for_each( document_.begin(), document_.end(),
boost::bind( &CharStatistics::fillMap, this, _1 );
Вы можете использовать std :: bind1st для «this», что является более сложным, так как вам все еще нужен mem_fun
std::for_each( document_.begin(), document_.end(),
std::bind1st( std::mem_fun(&CharStatistics::fillMap), this ) );
, который на самом деле выглядит ужасно сложным.Вот почему новое связывание намного лучше!
Если вам не разрешено использовать boost :: bind и вам не нравится решение mem_fun, напишите свой собственный функтор, который перегружает operator (), чтобы взятьголец.Например:
struct CharStatsFunctor
{
typedef std::map< char, size_t > map_type;
map_type & mapToFill;
explicit CharStatsFunctor( map_type & m ) : mapToFill( m ) {}
void operator()(char ch ) const
{
++mapToFill[ ::tolower( ch ) ];
}
};
В вызове цикла
std::for_each( document_.begin(), document_.end(), CharStatsFunctor( chars_ ) );
Обратите внимание, что в вашей функции fillMap есть ошибка.Решение, которое я дал, будет работать.