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;
}
を並べ替え。どのようにしてデータ規則の意味論的アクションで合成属性(タプル)の要素にアクセスできますか?私はこの瞬間に思い付くことができメイクは私が<b>ダブル</b>前<b>int型</b>を生成し、それ算術演算で作る必要がある(例として)ルールで<b>データ</b>を使用する精神を持つタプルのベクトルからタプル::カルマ
おかげ
ので、完全なサンプルは次のようになります。あなたの答えは本当にうまくいきます。 –
@fat_lor_troll:好きな方はもっと融合ベースのアプローチもあります。http://stackoverflow.com/questions/4788470/boostspiritqi-and-out-of-sequence-variables – sehe