我目前无法找到修正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的正确语法是什么样的。
答案 0 :(得分:23)
您还需要绑定trim的第二个参数(语言环境):
std::vector<std::string> v;
std::for_each(v.begin(), v.end(),
boost::bind(&boost::trim<std::string>,
_1, std::locale() ));