gpt4 book ai didi

c++ - boost::phoenix 中的逗号行为似乎不正确

转载 作者:行者123 更新时间:2023-11-30 02:51:45 24 4
gpt4 key购买 nike

给定一个凤凰代码 [a(),b()],我认为正确的行为分别是调用 a() 然后调用 b(),但显然在 boost 1.47 中只调用了第二个函数,这就是它应该的成为?看下面的代码:

struct employee_parser : qi::grammar<Iterator, employee(), ascii::space_type>
{
employee_parser() : employee_parser::base_type(start)
{
using qi::int_;
using qi::lit;
using qi::double_;
using qi::lexeme;
using ascii::char_;

using ascii::string;
using namespace qi::labels;
using boost::phoenix::ref;
using boost::phoenix::val;

quoted_string %= (lexeme['"' >> +(char_ - '"') >> '"' ]) ;

start %= (
lit("employee")
>> '{'
>> int_ >> ','
>> quoted_string [std::cout<<ref(text1)<<" \n",ref(text1) = _1] >> ','
>> quoted_string >> ','
>> double_
>> '}' )
;
}

qi::rule<Iterator, std::string(), ascii::space_type> quoted_string;
qi::rule<Iterator, employee(), ascii::space_type> start;
std::string text1;
};

为什么不调用第一部分?它是错误并在最新的 boost 库中修复了吗?

std::cout<<ref(text1)<<" \n"

最佳答案

您可能需要显式包含

#include <boost/spirit/include/phoenix_operator.hpp>

曾经有一个 boost 版本,其中包含主要的 Phoenix header 无法引入此必需的 header 。

在更新的版本中,这不再需要。我通常建议在更高版本中切换到 Phoenix V3:

#define BOOST_SPIRIT_USE_PHOENIX_V3

Phoenix V3 具有更多功能、更好的 (c++11) 互操作性,并且通常比 Phoenix V2 更先进

关于c++ - boost::phoenix 中的逗号行为似乎不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19512416/

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