#define BOOST_SPIRIT_USE_PHOENIX_V3 #include "boost/version.hpp" #if ( BOOST_VERSION < 105100 ) #define BOOST_NO_SCOPED_ENUMS #else #define BOOST_NO_CXX11_SCOPED_ENUMS #endif #include "boost/filesystem.hpp" #include #include //#include "boost/assign.hpp" #include #include #include "boost/format.hpp" #include #include "boost/regex.hpp" #include "boost/lexical_cast.hpp" #include #include "boost/date_time.hpp" #include "boost/concept_check.hpp" #include "boost/utility.hpp" #include "boost/ptr_container/ptr_vector.hpp" #include "boost/ptr_container/ptr_map.hpp" #include "boost/shared_ptr.hpp" #include "boost/foreach.hpp" #include #include #include #include "boost/tuple/tuple.hpp" #include "boost/fusion/tuple.hpp" #include "boost/variant.hpp" #include "boost/variant/recursive_variant.hpp" #include #include #include "boost/thread.hpp" #include #include #include #include #include namespace qi = boost::spirit::qi; //namespace repo = boost::spirit::repository; namespace phx = boost::phoenix; typedef boost::fusion::vector3 MyList; class TestClass { public: TestClass ( double a, double b, int p3, double p4, MyList ap, MyList bp ) {} }; typedef boost::shared_ptr Result; int main(int argc, char* argv[]) { qi::rule testrule; // testrule = qi::double_ >> ( qi::int_ | qi::attr(1) ); testrule = ( '(' >> qi::double_ >> qi::hold[ ( (( qi::lit("ext") >> qi::double_ ) | qi::attr((0.0))) >> (( qi::lit("vmiter") >> qi::double_ ) | qi::attr((0.0))) >> (( qi::lit("hmiter") >> qi::double_ ) | qi::attr((0.0))) ) ] >> ',' >> qi::double_ >> qi::hold[ ( (( qi::lit("ext") >> qi::double_ ) | qi::attr((0.0))) >> (( qi::lit("vmiter") >> qi::double_ ) | qi::attr((0.0))) >> (( qi::lit("hmiter") >> qi::double_ ) | qi::attr((0.0))) ) ] >> ',' >> qi::int_ >> ',' >> qi::double_ >>')' ) [ qi::_val = phx::construct(phx::new_(qi::_1, qi::_3, qi::_5, qi::_6, qi::_2, qi::_4)) ] ; return 0; }