gpt4 book ai didi

boost - 分配或修改规则中的继承属性并将结果传播到父规则

转载 作者:行者123 更新时间:2023-12-01 02:55:14 25 4
gpt4 key购买 nike

假设我有一个像这样的 Boost Spirit 语法,其中父规则将继承的属性传递给它的子项。

template <typename Iterator>
struct MyGrammar : qi::grammar<Iterator, vector<Foo>()>
{
qi::rule<Iterator, vector<Foo>()> start;

qi::rule<Iterator, vector<Foo>(Bar)> parent;
qi::rule<Iterator, Foo(Bar)> child1;
qi::rule<Iterator, Foo(Bar)> child2;

MyGrammar() : MyGrammar::base_type(start)
{
start = parent( Bar(etc) ); // An "initial" value for the Bar passed
// between the following rules. More on
// that later.

parent = child1(_r1) >> child2(_r1);
child1 = ...[do something with _r1];
child2 = ...[do something with _r1];
}
};

每个子规则返回的 Foo 取决于给定的 Bar 继承属性。对于父规则,我可能也有这个:
parent = *child(_r1);

我想知道的是,子规则是否可以修改继承的属性,将修改传播到其父规则,并将新值传递给下一个子规则。

在上面的示例中,开始规则将为在父规则及其子规则中使用的 Bar 建立初始值。 Bar 每次通过子规则时都会被修改。这甚至可能吗,这样的代码会是什么样子?

最佳答案

继承的属性可以通过引用传递:

qi::rule<Iterator, vector<Foo>(Bar)> parent;
qi::rule<Iterator, Foo(Bar&)> child1;
qi::rule<Iterator, Foo(Bar&)> child2;

和:
parent = child1(phoenix::ref(_r1)) >> child2(phoenix::ref(_r1));  

允许实现你想要的。

关于boost - 分配或修改规则中的继承属性并将结果传播到父规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3217700/

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