Boost :: обрезать каждую строку в std :: vector <std :: string> - PullRequest
10 голосов
/ 08 февраля 2010

В настоящее время я застрял в поиске правильного синтаксиса для обрезки каждой строки в std :: vector.

Я пытался

std::vector<std::string> v;
std::for_each(v.begin(), v.end(), &boost::trim);

, который дал мне следующие сообщения об ошибках в MSVC7.1.

ошибка C2784: '_Fn1 std :: for_each (_InIt, _InIt, _Fn1)': не удалось вывести аргумент шаблона для 'T1' из 'std :: vector <_Ty> :: iterator' с [_Ty = std :: строка]: см. объявление 'std :: for_each'

ошибка C2896: '_Fn1 std :: for_each (_InIt, _InIt, _Fn1)': нельзя использовать шаблон функции 'void boost ::gorith :: trim (SequenceT &, const std :: locale &)' в качестве аргумента функции : смотрите объявление 'boost :: алгоритма :: trim'

Если я явно укажу параметр шаблона trims, второй параметр не может быть найден компилятором, хотя он установлен по умолчанию.

std::for_each(v.begin(), v.end(), &boost::trim<std::string>);

ошибка C2198: 'void (__cdecl *) (std :: string &, const std :: locale &)': слишком мало аргументов для вызова через указатель на функцию

Мне было интересно, как будет выглядеть правильный синтаксис для вызова trim для каждого элемента в v.

1 Ответ

23 голосов
/ 08 февраля 2010

Вам также необходимо связать второй параметр trim (локаль):

std::vector<std::string> v;
std::for_each(v.begin(), v.end(), 
              boost::bind(&boost::trim<std::string>,
                          _1, std::locale() ));
...