【发布时间】:2013-05-17 15:17:27
【问题描述】:
鉴于以下操作
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来生成输出。
在这种情况下。
【问题讨论】:
标签: c++ boost boost-spirit