缺少可选的boost :: spirit :: x3规则的属性值

时间:2017-03-20 18:33:07

标签: c++ boost-spirit-x3

我有一些带有一些可选部分的简单解析器。而且我已经注意到如果我使用自定义结构作为属性,而忽略的值是零初始化的。

struct face_triplet
{
    int v, vt, vn;
};
BOOST_FUSION_ADAPT_STRUCT(
    face_triplet,
    (int, v)
    (int, vt)
    (int, vn)
)

void test( std::string_view line )
{
    namespace x3 = boost::spirit::x3;

    std::vector<face_triplet> f;

    auto line_begin = line.begin();
    if( x3::phrase_parse( line_begin, line.end(), 
        'f' >> +( x3::lexeme[ x3::int_ >> -( ( '/' >> -x3::int_ >> -( '/' >> x3::int_ ) ) ) ] ), x3::lit(' ')|'\t', f ) )
    {
        std::cout << "f ";
        for( auto && v : f )
            std::cout << v.v << '/' << v.vt << '/' << v.vn << ' ';
        std::cout << '\n';
    }
}

例如,解析f 1//100 2//200 3//300f填入1/0/100 2/0/200 3/0/300

demo on wandbox

我可以依赖这种行为吗?或者这只是一个可以打破未来版本的巧合?

0 个答案:

没有答案