为什么在使用boost :: split时必须使用boost :: is_any_of?为什么在使用boost :: split时必须使用boost :: is_any_of?
当我用:boost::split(split_res, someStr, ".");
我得到一个错误。
为什么在使用boost :: split时必须使用boost :: is_any_of?为什么在使用boost :: split时必须使用boost :: is_any_of?
当我用:boost::split(split_res, someStr, ".");
我得到一个错误。
为什么?
因为API是按照这种方式设计的(例如它允许考虑到区域设置等动态谓词)。
但我怎么知道?我有一个奇怪的错误
你可以阅读documentation。如果你错误地使用它,编译器的工作就是告诉你它。
这似乎太复杂,我
不要使用它。用一个你喜欢的更简单的界面将它包裹在一个函数中。
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;
}
}
增加了一个示例来演示一个包装函数http://coliru.stacked-crooked.com/a/f4bf196fdf58988d – sehe
稍微简单一点(也可能更高效) :'boost :: split(v,input,[delim](char c){return delim == c;});' – zett42
@ zett42我希望它会优化方式,但你是对的,至少在一些配置:http://coliru.stacked-crooked.com/a/ca90a86f057c2233和http://coliru.stacked-crooked.com/a/1a1ace3196277df2 – sehe
请大家阅读[旅游]并提供[MCVE] –
貌似第三个参数是predicat'提振::分裂的时间(split_res,someStr,[] (char ch){return ch =='。';});' –