gpt4 book ai didi

c++ - 提振精神或秩序

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:47:23 25 4
gpt4 key购买 nike

我想创建一个解析字符串和 float 的 boost spirit 规则。我要解析的字符串格式如下:

(str astring)(n 123)

或者也可以是另一种顺序:

(n 123)(str astring)

我想创建一个具有以下类型属性的规则:

qi::rule<Iter, boost::fusion::vector<std::string, float>, ascii::space_type> hj;

到目前为止,这是我的代码:

qi::rule<Iter, std::string(), ascii::space_type> attr;
attr = lexeme[*alnum];

qi::rule<Iter, boost::fusion::vector<std::string, float>, ascii::space_type> hj;
hj = (
'(' >> lit("str") >> attr(/*put this at position 0*/) >> ')'
|
'(' >> lit("n") >> float_[/*put this at position 1*/] >> ')'
);

显然,这并不能编译(boost 扣除了另一个属性类型)。我该如何实现这一点,特别是我应该在注释代码中添加什么?

最佳答案

您可以使用置换运算符 ^。最小工作示例:

boost::fusion::vector<std::string,float> ans;
bool res = phrase_parse(first,last,
(lit("(") >> lit("str") >> lexeme[*ascii::alnum] >> lit(")") ) ^
(lit("(") >> lit("n") >> float_ >> lit(")") ),
ascii::space,ans);

更详细地描述了此解决方案 here .

关于c++ - 提振精神或秩序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20243600/

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