【发布时间】:2012-09-02 18:22:42
【问题描述】:
documentation 表示如果同时使用 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。
均匀
【问题讨论】:
标签: c++ boost boost-spirit