2010-02-08 91 views
9

我目前正在找到正确的语法来修剪std :: vector中的每个字符串。boost :: trim std :: vector中的每个字符串<std::string>

我试图

​​

这给了我在MSVC7.1以下错误消息。

错误C2784: '_Fn1的std ::的for_each(_Init,_init,_Fn1)':无法从推断关于 'T1' 模板参数 '的std ::矢量< _Ty> ::游标' 与[_Ty = std :: string]:看到'std :: for_each'的声明

错误C2896:'_Fn1 std :: for_each(_InIt,_InIt,_Fn1)':无法使用函数模板'void boost :: algorithm :: trim (SequenceT &,常量的std ::区域&)”作为函数参数:详见申报 '的boost ::算法::微调'

如果我明确给予编译器无法找到模板参数修剪第二个参数,尽管它默认设置了它。

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

错误C2198: '无效(__cdecl *)(的std :: string &,常量的std ::区域&)':通过指针到功能

呼叫参数太少

我想知道如何调用v中每个元素的修剪正确的语法。

+2

还请注意,'for_each'不用于修改原始序列。改用'transform'。 – 2010-02-08 13:37:10

+4

错误,for_each对于他正在做的事情来说是完美的。请记住,boost :: trim返回void,这意味着它不能与变换一起使用。 – Manuel 2010-02-08 13:44:49

+0

仅仅为了这种情况,是不是有boost :: trim_copy? – Rob 2010-02-08 13:55:06

回答

23

您需要装饰件的第二个参数(区域)结合,以及:

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

谢谢。我也想过绑定,但我不认为我可以轻松地在那里添加第二个参数。你帮了很多忙。 – Norbert 2010-02-08 13:49:12

相关问题