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前雙與它算術運算做。如何在數據規則的語義動作中訪問合成屬性(元組)的元素?製作重新排序元組從元組向量與使用精神::因緣
謝謝,你的答案真的很有用。 – 2012-01-13 10:25:32
@fat_lor_troll:如果你喜歡,還有一種更融合的方法,請參閱http://stackoverflow.com/questions/4788470/boostspiritqi-and-out-of-sequence-variables – sehe 2012-01-13 10:51:09