【发布时间】:2014-10-26 23:19:55
【问题描述】:
我正在使用一个消耗成对向量的业力生成器 - 类似于 http://boost-spirit.com/home/articles/karma-examples/output-generation-from-a-list-of-key-value-pairs-using-spirit-karma/
我根据上面的文章构建了一个示例来显示我的问题
#include <boost/fusion/include/std_pair.hpp>
#include <boost/spirit/include/karma.hpp>
namespace karma = boost::spirit::karma;
typedef std::pair<std::string, std::string > pair_type;
template <typename OutputIterator>
struct keys_and_values : karma::grammar<OutputIterator, std::vector<pair_type>()>
{
keys_and_values() : keys_and_values::base_type(query)
{
query = *pair;
// here is the interesting part
pair = karma::string << ' ' << karma::string << ' ' << karma::string << karma::eol;
}
karma::rule<OutputIterator, std::vector<pair_type>()> query;
karma::rule<OutputIterator, pair_type()> pair;
};
int main(int argc, char *argv[])
{
typedef std::back_insert_iterator<std::string> sink_type;
std::vector<pair_type> v;
v.push_back(pair_type("key1", "value1"));
v.push_back(pair_type("key2", "value2"));
v.push_back(pair_type("key3", "value3"));
std::string generated;
sink_type sink(generated);
keys_and_values<sink_type> g;
bool result = karma::generate(sink, g, v);
std::cout << generated << std::endl;
return 0;
}
我想要实现的是像“value1 key1 value1”这样的输出。通常它会输出“key1 value1”(但仅当您在我的示例中删除第三个 karma::string 时) 我已经尝试了很多带有语义操作的东西,例如
pair = karma::string[karma::_1 = karma::_val] ...
但是,这不起作用。我可能需要其他东西来从我的 std::pair 中获取价值。
这 2 个问题看起来很有趣,但没有解决我的问题 reuse parsed variable with boost karma How to access data of nested objects in boost::spirit::karma?
【问题讨论】:
-
根据 Mike M 在您的第一个链接问题中的评论,您可以使用 like this。
标签: c++ boost boost-spirit boost-spirit-karma