通过在boost :: qi语法中使用的boost :: phoenix访问元组作为向量的后面元素

时间:2012-09-22 11:43:59

标签: boost boost-spirit-qi boost-phoenix

如何通过语法中使用的boost :: phoenix访问元组作为向量的后面元素。我想设置向量的后面元素的元组的第二个元素(之前添加)

例如

typedef boost::tuple<std::string, std::string, std::string> var_type;
typedef std::vector<var_type> vars_type;


template <typename Iterator>
struct some_grammar : qi::grammar<Iterator, vars_type()>
{
    some_grammar() : 
        some_grammar::base_type(some_rule)
    {
        .....
        .....
        .....
        //somewhere inside grammar
        .....

        some_rule = ... >> -some_rule2
        [
            phoenix::at_c<2, var_type>
            (
                phoenix::back(qi::labels::_val)
            ) = qi::labels::_1
        ] >>
        qi::lit(',');
     }
}

在我的msvc 2008错误中

boost :: phoenix :: at_c':无法将参数1从'boost :: phoenix :: actor'转换为'const var_type&amp;

显然phoenix::at_c无法从tuple中推断出phoenix::back类型。

我的问题:如何在这种情况下组合凤凰语句?

0 个答案:

没有答案