2
#include <tuple>
#include <vector>
#include <string>
#include <iostream>
//-------------------------------------------------------------------------
#include <boost/spirit/include/karma.hpp>
#include <boost/fusion/adapted/std_tuple.hpp>
//-------------------------------------------------------------------------
namespace ph = boost::phoenix;
namespace karma = boost::spirit::karma;
typedef std::back_insert_iterator<std::string> Sink;
typedef std::tuple<double,int> Data;
typedef std::vector<Data> Container;
struct Generator : karma::grammar<Sink,Container()>
{
Generator(void) : Generator::base_type(start,"Generator")
{
start = data % karma::eol;
//data = karma::delimit[???];
return;
}
karma::rule<Sink,Container()> start;
karma::rule<Sink,Data()> data;
};
//-------------------------------------------------------------------------
int main(int argc,char** argv)
{
Generator generator;
Container container;
container.push_back(Data(3.1415,100500));
container.push_back(Data(2.7183,9000));
std::string result;
Sink sink(result);
bool b = boost::spirit::karma::generate(sink,generator,container);
std::cerr << (b == true ? result : std::string("Error!")) << std::endl;
return 0;
}
в правиле данным (в качестве примера) мне нужно генерировать INT перед тем двойной и сделать с ней и арифметической операцией. Как получить доступ к элементам синтезированного атрибута (кортежа) в семантических действиях данных rule?Марки заказан кортеж из вектора кортежа с использованием духом :: карма
Спасибо , ваш ответ действительно работает. –
@fat_lor_troll: есть еще более основанный на синтезе подход, если хотите, см. Http://stackoverflow.com/questions/4788470/boostspiritqi-and-out-of-sequence-variables – sehe