5

(最初のステップとして、もちろん大幅に拡張されます) 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;

};

これはコンパイルされません ( can't convert from boost::spirit::_1_type to double) (私が正しく理解している場合)qi::_1は double ではなく、double にしか評価されないためです。

何らかの方法で使用boost::bind(&ExpressionTree::number, _1)してみましたが、属性に割り当てられた結果を取得する方法がわかりません_val

誰かが私を正しい方向に向けることができれば幸いです。

4

1 に答える 1