我希望解析一个字符串并确保它是小写的。
必须在这个阶段完成,因为精神构建了一切树。
所以我有这个规则
struct to_lower_object
{
typedef char result_type;
char operator()(char a) const
{
return std::tolower(a);
}
};
int main()
{
boost::phoenix::function<to_lower_object> lazy_lower;
qi::rule<std::string::iterator, char() >
lower_char=(qi::char_-":")
[
qi::_val=lazy_lower(qi::_1);
];
qi::rule<std::string::iterator, std::string() >
lower_string =
+lower_char;
:::
问题在于它不编译,错误也很大,大到发布。
由于
编辑:我修复了操作员重载,这是我的错,但问题仍然存在。我相信*它与占位符有关EDIT2:我已经解决了问题,以确保它正在处理char而不是一系列问题,但它仍然没有使用相同的错误。
答案 0 :(得分:1)
经过多次折磨,我终于开始工作了。
此:
struct to_lower_object
{
typedef char result_type;
char operator()(char a) const
{
return std::tolower(a);
}
};
应该是:
struct to_lower_object
{
template<typename Arg>
struct result{
typedef char type;
};
template<typename Arg>
char operator()(Arg arg1) const
{
return std::tolower(a);
}
};
超级。这显然是因为我正在阅读一些旧文档。
答案 1 :(得分:-1)
我很确定第qi::rule<std::string::iterator, std::string() >
行永远不会编译。您的意思是qi::rule<std::string::iterator, std::string >
吗?