Я пытаюсь вывести параметры, они могут быть либо одним параметром, либо вектором параметров. Следующий код не то, что я хотел бы это сделать:Вывод типа boost :: variant с использованием boost :: spirit :: karma
#include <iostream>
#include <string>
#include <boost/variant.hpp>
#include <boost/spirit/include/karma.hpp>
namespace karma = boost::spirit::karma;
typedef std::vector<int> ParameterList;
typedef boost::variant<int, ParameterList> Parameter;
main()
{
using karma::int_;
using karma::eol;
using karma::lit;
std::string generated;
std::back_insert_iterator<std::string> sink(generated);
karma::rule<std::back_insert_iterator<std::string>, ParameterList()> parameterListRule = int_ % lit(", ");
karma::rule<std::back_insert_iterator<std::string>, Parameter()> parameterRule = (int_ | parameterListRule) << eol;
karma::generate(sink, parameterRule, 1); // Works
karma::generate(sink, parameterRule, ParameterList{1, 2}); // Doesn't work
std::cout << generated << "\n";
}
(Реальный код имеет другие типы параметров, а не только INT, и я не могу просто сделать все, чем ParameterList.)
I не совсем понимаю, как это сделать, в частности, поскольку аналогичная конструкция для синтаксического анализа отлично подходит для меня с использованием boost :: spirit :: qi.
Я думал, что смогу значительно упростить свою фактическую проблему, а затем прикрутить ее, представив эту тупую ошибку. Спасибо, и жаль, моя настоящая проблема сейчас [здесь] (http://stackoverflow.com/questions/18101509/boostspiritkarma-output-of-string-in-quotation-marks). – Xoph