2017-09-02 2386 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