boost :: trim std :: vector <std :: string> </std :: string>中的每个字符串

时间:2010-02-08 13:26:37

标签: c++ stl boost foreach

我目前无法找到修正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)':无法使用[_Ty = std ::'从'std :: vector&lt; _Ty&gt; :: iterator'推断'T1'的模板参数string]:参见'std :: for_each'的声明

     

错误C2896:'_ _ Fn1 std :: for_each(_InIt,_InIt,_Fn1)':不能使用函数模板'void boost :: algorithm :: trim(SequenceT&amp;,const std :: locale&amp;)'作为函数参数:参见'boost :: algorithm :: trim'的声明

如果我明确地给出了模板参数trims,那么编译器无法找到第二个参数,虽然它默认设置。

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

错误C2198:'void(__ cdecl *)(std :: string&amp;,const std :: locale&amp;)':通过指针到函数调用的参数太少

我想知道为v中的每个元素调用trim的正确语法是什么样的。

1 个答案:

答案 0 :(得分:23)

您还需要绑定trim的第二个参数(语言环境):

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