0
爲了將它們與Boost.Spirit V2.x(特別是Boost.Spirit.Qi)一起使用,是否真的需要用Boost.Fusion包裝結構體/類?我寧願使用語義動作來分配給成員。如果我的記憶爲我服務,那麼這就是它以前在V1.x中完成的方式...是否可以在沒有Boost.Fusion的情況下使用Boost.Spirit V2.x?
calculator example表明它應該仍然有可能。到目前爲止,我還沒有找到一個好方法來做到這一點。
我想看看你會怎麼做employee example。以下不編譯,但也許有一些方法,使其工作:
template <typename Iterator>
struct employee_parser : qi::grammar<Iterator, employee(), ascii::space_type>
{
employee_parser() : employee_parser::base_type(start)
{
using qi::int_;
using qi::lit;
using qi::double_;
using qi::lexeme;
using ascii::char_;
quoted_string %= lexeme['"' >> +(char_ - '"') >> '"'];
start =
lit("employee")
>> '{'
>> int_[px::bind(&employee::age, qi::_val) = qi::_1] >> ','
>> quoted_string[px::bind(&employee::surname, qi::_val) = qi::_1] >> ','
>> quoted_string[px::bind(&employee::forename, qi::_val) = qi::_1] >> ','
>> double_[px::bind(&employee::salary, qi::_val) = qi::_1]
>> '}'
;
}
qi::rule<Iterator, std::string(), ascii::space_type> quoted_string;
qi::rule<Iterator, employee(), ascii::space_type> start;
};