documentation은 A와 B를 모두 사용하는 경우 두 합성 된 규칙 (>> >> 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로 나타납니다.
에도
감사합니다! :) 그거야. – iolo