2010-02-08 95 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

相關問題