理解精神语法

Raj*_*war 0 c++ boost boost-spirit

在阅读文档时,我读到了这一点

对于用逗号分隔的双字符串,我们可以这样(我明白)

double_ >> * (',' >> double_) 要么 double_ %

但是下面的表达是什么意思呢.它应该将逗号分隔的字符串拆分为一个向量,它可以工作.如果有人能够澄清它,我将不胜感激.我对-运算符感到困惑我相信它是一个差异运算符,但我无法弄清楚它在这里的作用

*(qi::char_ - ',') % ','

Igo*_* R. 5

*(char_ - ',')表示"匹配零个或多个字符,但','",它也可以这样写:*~char_(",").另一方面,*char_意味着"匹配零个或多个字符".

要理解,为什么需要排除,只需尝试使用和不使用它:

#include <string>
#include <boost/spirit/home/qi.hpp>
int main()
{
    using namespace boost::spirit::qi;
    std::vector<std::string> out1, out2;
    std::string s = "str1, str2, str3";
    bool b = parse(s.begin(), s.end(), *~char_(",") % ",", out1); // out1: ["str1", "str2", "str3"]
    b = parse(s.begin(), s.end(), *char_ % ",", out2); // out2: ["str1, str2, str3"]
}
Run Code Online (Sandbox Code Playgroud)