文档说,如果同时使用 A 和 B,则两个复合规则 (a >> b) 的属性应该是元组。
假设这一点,我试图读出这样一个元组的第一个属性。但它失败了:(
我尝试将解析的整数存储在'i'中)
#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]);
只要 A 是一个 int,它将始终有效。
来回更改类型并编写自定义规则表明,无论 B 是什么,(a >> b) 的属性都将始终为 A。
甚至