如何使用具有默认精神的列表语法
how to use list syntax with defaults spirit
我正在尝试解析逗号分隔的整数,可能有空格。例如,1,2,,3,,-1
应解析为 {1,2,n,3,n,-1}
,其中 n
是某个常数。
表达式,
(int_ | eps) % ','
在 n == 0
时有效。更具体地说,以下代码适用于 0
:
#include <boost/spirit/include/qi.hpp>
#include <iostream>
int main() {
using namespace boost::qi;
std::vector<int> v;
std::string s("1,2,,3,4,,-1");
phrase_parse(s.begin(), s.end(),
(int_|eps) % ','
, space, v);
}
我为任意 n
尝试了以下表达式:
(int_ | eps[_val = 3]) % ','
但显然这是错误的。编译器生成错误小说。我避免在此处粘贴所有内容,因为我尝试的很可能是不正确的(而不是特定的编译器问题)。
正确的方法是什么?
尼克
attr()
解析器就是为了这个目的而存在的:
(int_ | attr(3)) % ','
我正在尝试解析逗号分隔的整数,可能有空格。例如,1,2,,3,,-1
应解析为 {1,2,n,3,n,-1}
,其中 n
是某个常数。
表达式,
(int_ | eps) % ','
在 n == 0
时有效。更具体地说,以下代码适用于 0
:
#include <boost/spirit/include/qi.hpp>
#include <iostream>
int main() {
using namespace boost::qi;
std::vector<int> v;
std::string s("1,2,,3,4,,-1");
phrase_parse(s.begin(), s.end(),
(int_|eps) % ','
, space, v);
}
我为任意 n
尝试了以下表达式:
(int_ | eps[_val = 3]) % ','
但显然这是错误的。编译器生成错误小说。我避免在此处粘贴所有内容,因为我尝试的很可能是不正确的(而不是特定的编译器问题)。
正确的方法是什么?
尼克
attr()
解析器就是为了这个目的而存在的:
(int_ | attr(3)) % ','