0

次のコードでは、Boost Spirit Auto Parserを1つまたは2つのdoubleに使用しようとしていますが、コンパイルされません。私はここで何が間違っているのですか?

// file main.cpp

#include <boost/tuple/tuple.hpp>
#include <boost/spirit/include/qi.hpp>

namespace qi = boost::spirit::qi;

int main()
{
    boost::tuple<double, double> p;
    char* i = 0;
    qi::phrase_parse( i, i, p, qi::space );
    // qi::phrase_parse( i, i, qi::double_ >> qi::double_, qi::space, qi::skip_flag::postskip, p );

    return 0;
}

コメント化された行はコンパイルされるため、 ;boost::tuple<double, double>の属性タイプとして受け入れられます。qi::double_ >> qi::double_ただし、属性タイプからパーサーを取得できません。なんで?

4

2 に答える 2

1

他の質問と同じ答えboost::fusion::vectorです。代わりに使用してください。

于 2012-03-14T19:30:42.047 に答える
0

次のインクルードをプログラムに追加すると、コンパイルされます(g ++ 4.6.1 / boost 1.46.1)。

#include <boost/fusion/adapted/boost_tuple.hpp>

これにより、boost ::tupleが適合ブースト::fusionシーケンスに適応し、シーケンス複合属性ルールで必要になると思います。

http://www.boost.org/doc/libs/1_48_0/libs/spirit/doc/html/spirit/qi/quick_reference/compound_attribute_rules.html

グラハム

于 2012-03-25T02:03:50.643 に答える