2017-09-02 115 views
2

爲什麼在使用boost :: split時必須使用boost :: is_any_of?爲什麼在使用boost :: split時必須使用boost :: is_any_of?

當我用:boost::split(split_res, someStr, ".");

我得到一個錯誤。

+3

請大家閱讀[旅遊]並提供[MCVE] –

+0

貌似第三個參數是predicat'提振::分裂的時間(split_res,someStr,[] (char ch){return ch =='。';});' –

回答

1

爲什麼?

因爲API是按照這種方式設計的(例如它允許考慮到區域設置等動態謂詞)。

但我怎麼知道?我有一個奇怪的錯誤

你可以閱讀documentation。如果你錯誤地使用它,編譯器的工作就是告訴你它。

這似乎太複雜,我

不要使用它。用一個你喜歡的更簡單的界面將它包裹在一個函數中。

Live On Coliru

namespace my { 
    template <typename R = std::vector<std::string> > 
     R split(std::string const& input, char delim = '.') { 
      R v; 
      boost::split(v, input, boost::algorithm::is_any_of(std::array<char,1>{delim})); 
      return v; 
     } 
} 
+0

增加了一個示例來演示一個包裝函數http://coliru.stacked-crooked.com/a/f4bf196fdf58988d – sehe

+0

稍微簡單一點(也可能更高效) :'boost :: split(v,input,[delim](char c){return delim == c;});' – zett42

+0

@ zett42我希望它會優化方式,但你是對的,至少在一些配置:http://coliru.stacked-crooked.com/a/ca90a86f057c2233和http://coliru.stacked-crooked.com/a/1a1ace3196277df2 – sehe

相關問題