如何从Spirit :: Qi规则访问boost :: variant成员?
我无法找到一种正确的方法如何在我的Spirit-Qi语法中使用boost :: phoenix访问boost :: variant的成员。这是一个简单的例子,我正在努力实现。 (我的整个语法要复杂得多,这是我测试提到的问题的简单片段)。
namespace ph = boost::phoenix;
typedef boost::variant<std::string,int> VariantType;
typedef std::list<VariantType> TlstVariants;
rule<Iterator, void(TlstVariants&), Skipper> rule1;
rule1 =
qi::eps [ ph::push_back(qi::_r1, ph::construct<int>(2)) ]
>> qi::eps [ ph::get<int>(ph::back(qi::_r1)) = ph::val(3) ] //THIS IS EXAMPLE OF WHAT I NEED
;
TlstVariants lstVals;
ExecuteParser("5",rule1( ph::ref(lstVals) ));
BOOST_FOREACH( VariantType &val, lstVals )
{
std::cout << val.which() << " - " << val;
}
但我找不到任何phoenix :: get&lt;>或任何类似的方法来使用Phoenix访问boost :: variant。我需要phoenix :: get&lt;>的原因是因为我需要将变量插入到具有特定类型的列表中,然后将此特定类型作为对子规则的引用作为继承属性传递:
qi::rule<Iterator, void(structTest&), Skipper> rule_child;
rule =
qi::lit("test") [ph::push_back(sp::_r1, ph::construct<structTest>())]
> qi::lit('(')
> rule_child( ph::get<structTest>(ph::back(sp::_r1)) )
> qi::lit(')')
...
有没有办法如何实现这样的行为?
谢谢你的回复
干草堆
没有找到相关结果
已邀请:
2 个回复
荒劫娇噬
的一个。
现在,这可以用于语义操作:
骇毖煽洁铂
我的语法现在看起来像这样:
一切似乎都有效。再次感谢hkaiser的初步回复,这对我很有帮助。