gpt4 book ai didi

c++ - Boost Spirit 占位符类型转换

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:35:26 24 4
gpt4 key购买 nike

我正在尝试编写一个解析器(作为第一步,当然它会扩展很多)解析一个 double 并通过将该 double 传递给我类的工厂方法来创建我的类 ExpressionTree 的一个对象。这是我的第一次尝试

struct operands : qi::grammar<string::iterator, ExpressionTree()> 
{

operands() : operands::base_type(start)
{
start = qi::double_[qi::_val = ExpressionTree::number(qi::_1)];
}

qi::rule<string::iterator, ExpressionTree()> start;

};

这不会编译(不能从 boost::spirit::_1_type 转换为 double)因为(如果我理解正确的话)qi::_1 是不是 double,但只评估为 double。

我尝试以任何方式使用 boost::bind(&ExpressionTree::number, _1) 但我不知道如何才能将结果分配给属性 _val

如果有人能指出正确的方向,我将不胜感激。

最佳答案

在语义 Action 中你需要懒惰的 Actor 。

我假设 number 是静态一元函数或非静态 nullary(而不是类型):

start = qi::double_ [ qi::_val = boost::phoenix::bind(&ExpressionTree::number, qi::_1)];

如果它是一个类型:

start = qi::double_ [ qi::_val = boost::phoenix::construct<ExpressionTree::number>(qi::_1)];

另见

关于c++ - Boost Spirit 占位符类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16545196/

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