documentation说如果使用A和B,则两个合成规则(a >> b)的属性应该是元组。属性组合不起作用Boost :: spirit
假设这我试图读出这样一个元组的第一个属性。但它失败:
(我尝试解析整数存储在“我”)
#include <boost/spirit/include/qi.hpp>
#include <boost/spirit/include/phoenix_core.hpp>
#include <boost/spirit/include/phoenix_operator.hpp>
#include <boost/spirit/include/phoenix_object.hpp>
template <typename ForwardIterator> class TestGrammar
: public boost::spirit::qi::grammar<ForwardIterator, boost::spirit::ascii::space_type>
{
boost::spirit::qi::rule<ForwardIterator, boost::spirit::ascii::space_type> foo_;
public:
TestGrammar(void) : TestGrammar::base_type(foo_)
{
int i;
foo_ = ((boost::spirit::qi::int_ >> boost::spirit::qi::float_)
[boost::phoenix::ref(i) = boost::phoenix::at_c<0>(boost::spirit::_1)]);
}
};
int main(void)
{
TestGrammar<std::string::iterator> g;
return 0;
}
写作:
foo_ = ((boost::spirit::qi::int_ >> boost::spirit::qi::float_)
[boost::phoenix::ref(i) = boost::spirit::_1]);
总会的工作,虽然只要是int。
来回更改类型并编写自定义规则显示(a >> b)的属性始终为A,而不管B是什么。
即使
谢谢! :) 这样可行。 – iolo