鉴于以下动作
struct Data {
double d;
void operator()( double dd,
boost::spirit::qi::unused_type,
boost::spirit::qi::unused_type )
{ d = dd; }
};
struct Printer {
void operator()( double dd,
boost::spirit::qi::unused_type,
boost::spirit::qi::unused_type ) const
{ std::cout << dd; }
};
编码
void foo( const std::string &s ) {
Printer p;
boost::spirit::qi::parse( s.begin(), s.end(),
boost::spirit::qi::double_[ p ] );
}
编译时
double foo( const std::string &s ) {
Data d;
boost::spirit::qi::parse( s.begin(), s.end(),
boost::spirit::qi::double_[ d ] );
return d.d;
}
才不是。
查看http://www.boost.org/doc/libs/1_53_0/libs/spirit/doc/html/spirit/qi/tutorials/semantic_actions.html中的示例,可以看到函数对象使用operator()
声明的const
. MSVC 的错误消息 C3848 暗示了类似的内容。
这里需要常量吗?http://www.boost.org/doc/libs/1_53_0/libs/spirit/doc/html/spirit/qi/reference/action.html中的文档只说需要签名void( Attrib&, Context, bool& )
。
备注:我必须承认我不太明白这句话
函数或函数对象应返回值以通过将其分配给第一个参数来生成输出
attr
。
在这种情况下。