gpt4 book ai didi

c++ - 使用 boost karma 重用已解析的变量

转载 作者:太空狗 更新时间:2023-10-29 23:04:28 27 4
gpt4 key购买 nike

我有一个代码库,它与下面的代码相当。我尝试生成一个文本文件,其内容是变量内容的两倍。我觉得答案在语义操作和 _a 和 _val 中,但即使有文档也无法解决。

你将如何拥有:海峡中的“toto”和输出:toto 一些东西toto

即如何在 karma 中重用已解析的变量?

struct data
{
std::string str;
};

BOOST_FUSION_ADAPT_STRUCT(
data,
(std::string, str)
)

template <typename Iterator>
struct data: karma::grammar<Iterator, data() >
{
data():data::base_type(start)
{
start = karma::string << karma::lit("some stuff") << karma::string; //Second string is in fact the first one
}
karma::rule<Iterator, data()> start;
};

解决方案(根据下面的帖子:)

#include <iostream>
#include <string>
#include <boost/fusion/include/adapt_struct.hpp>
#include <boost/spirit/include/karma.hpp>
#include <boost/spirit/include/phoenix_core.hpp>
#include <boost/spirit/include/phoenix_operator.hpp>
#include <boost/spirit/include/phoenix_fusion.hpp>
#include <boost/spirit/include/phoenix_stl.hpp>
#include <boost/spirit/include/phoenix_object.hpp>
#include <boost/spirit/include/support_istream_iterator.hpp>
#include <boost/spirit/include/support_iso8859_1.hpp>

namespace ast
{
struct data
{
std::string str;
};
}

BOOST_FUSION_ADAPT_STRUCT(
ast::data,
(std::string, str)
)

namespace karma = boost::spirit::karma;

namespace parser
{

template <typename Iterator>
struct data: karma::grammar<Iterator, ast::data() >
{
data():data::base_type(start)
{
start =
karma::string[karma::_1 = boost::phoenix::at_c<0>(karma::_val)] <<
karma::lit("some stuff") <<
karma::string[karma::_1 = boost::phoenix::at_c<0>(karma::_val)]
;
}
karma::rule<Iterator, ast::data()> start;
};
}

main()
{
ast::data d;
d.str = "toto";
std::string generated;
typedef std::back_insert_iterator<std::string> iterator_type;
parser::data<iterator_type> d_p;
iterator_type sink(generated);
karma::generate(sink, d_p, d);
std::cout << generated << std::endl;
}

最佳答案

这应该可以解决问题:

start = karma::string[karma::_1 = karma::_val] 
<< karma::lit("some stuff")
<< karma::string[karma::_1 = karma::_val];

关于c++ - 使用 boost karma 重用已解析的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22812707/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com