提升精神气,占位符功能

时间:2014-08-30 06:34:14

标签: c++ boost boost-spirit-qi

我很难绕过以下事项:

int main( int, char *[] )
{
    const string test( "1 2" );
    typedef string::const_iterator iterator;

    auto desired = []( int a, int b )
    {
    };

    auto working = []( boost::fusion::vector2<int,int> )
    {
    };

    iterator i = test.begin( );
    qi::phrase_parse( i, test.end( ),
                     (
                      qi::int_ >>
                       qi::int_
                      )
                     [ working ]
//                   [ ph::bind( desired, qi::_1, qi::_2 ) ]
                     , qi::ascii::space );

    return test.end( ) - i;
}

我知道这主要是代码,但我认为它是自我解释的; 'working'回调很好,但是如果我将它评论为支持所需的行,编译器会说不,使用以下单词:

  

/opt/local/include/boost/spirit/home/phoenix/core/detail/function_eval.hpp:115:30:   'template'关键字后面的'result'不是指模板

     

/opt/local/include/boost/mpl/eval_if.hpp:38:22:输入'f_'(又名'int')   不能在'::'之前使用,因为它没有成员

     

/opt/local/include/boost/spirit/home/support/action_dispatch.hpp:178:13:   没有用于调用'const类型的对象的匹配函数   phoenix :: actor,vector&gt;,参数&lt; 0&gt ;,参数&lt; 1&gt;,   void_,void_,void_,void_,void_,void_,void_&gt; &GT; &GT;'

我尝试过phoenix :: bind,boost :: bind,编写自己的包装器......没有成功。 好吧,我自己的包装工作确实有效,但不是模板化的,所以这没用,而且我认为这是凤凰的工作。

任何帮助将不胜感激!

0 个答案:

没有答案