我正在尝试编写一个解析器(作为第一步,当然它将被扩展很多)解析一个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;
};
Run Code Online (Sandbox Code Playgroud)
这不是compile(can't convert from boost::spirit::_1_type to double)因为(如果我理解正确的话)qi::_1不是double,而只是求值为double.
我尝试boost::bind(&ExpressionTree::number, _1)以任何方式使用但我不知道如何将结果分配给属性_val
如果有人能指出我正确的方向,我将不胜感激.
在语义动作中你需要懒惰的参与者。
我假设number是静态一元函数或非静态零值(而不是例如类型):
start = qi::double_ [ qi::_val = boost::phoenix::bind(&ExpressionTree::number, qi::_1)];
Run Code Online (Sandbox Code Playgroud)
如果它是一种类型:
start = qi::double_ [ qi::_val = boost::phoenix::construct<ExpressionTree::number>(qi::_1)];
Run Code Online (Sandbox Code Playgroud)
也可以看看
| 归档时间: |
|
| 查看次数: |
860 次 |
| 最近记录: |