我很难绕过以下事项:
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,编写自己的包装器......没有成功。 好吧,我自己的包装工作确实有效,但不是模板化的,所以这没用,而且我认为这是凤凰的工作。
任何帮助将不胜感激!