(最初のステップとして、もちろん大幅に拡張されます) 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
誰かが私を正しい方向に向けることができれば幸いです。