fork download
  1. #include <boost/variant.hpp>
  2. #include <boost/spirit/include/karma.hpp>
  3.  
  4. namespace karma = boost::spirit::karma;
  5. typedef boost::variant<int, std::string> Parameter;
  6. typedef std::vector<Parameter> Parameters;
  7.  
  8. void test(boost::variant<Parameters, Parameter> const& v)
  9. {
  10. typedef boost::spirit::ostream_iterator It;
  11. using namespace karma;
  12.  
  13. const static rule<It, std::string()> quoted
  14. = '"' << *('\\' << char_('"') | char_) << '"'
  15. ;
  16. const static rule<It, Parameter()> param
  17. = int_ | quoted
  18. ;
  19. const static rule<It, boost::variant<Parameters, Parameter>()> rule
  20. = param | param % ", "
  21. ;
  22.  
  23. std::cout << karma::format(rule, v) << '\n';
  24. }
  25.  
  26. int main()
  27. {
  28. test(1);
  29. test("foo");
  30. test("escape: \"foo\"");
  31. test(Parameters { 1, 2, 3, "escape: \"foo\"" });
  32. }
  33.  
  34.  
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty