#include #include #include #include #include #include #include #include namespace qi = boost::spirit::qi; namespace ascii = boost::spirit::ascii; namespace phoenix = boost::phoenix; template class ClassAGrammar : public qi::grammar { private: qi::rule pair; public: ClassAGrammar(ActionHandler & handler); }; template ClassAGrammar::ClassAGrammar(ActionHandler & handler):ClassAGrammar::base_type(pair, "pair") { pair.name("pair"); pair = #ifdef COMPERR (qi::int_ > '=' > +qi::char_)[bind(&ActionHandler::addKeyValue, boost::ref(handler), qi::_1, "Test")] > #else (qi::int_ > '=' > +qi::char_)[bind(&ActionHandler::addKeyValue, boost::ref(handler), 1, "Test")] > #endif qi::eoi ; qi::debug(pair); } class ClassA { private: public: ClassA(); ~ClassA(); void addKeyValue(int key, std::string value); bool parse(std::string text); }; ClassA::ClassA(){ } ClassA::~ClassA(){ } void ClassA::addKeyValue(int key, std::string value){ std::cout<<"Adding "< "< pcfGrammar(*this); return phrase_parse(begin, end, pcfGrammar, qi::space); } int main(){ ClassA ptc; bool r = ptc.parse("3=value"); if(r) std::cout<<"Parse ok\n"; else std::cout<<"Parse ko\n"; return 0; }