1

我希望解析一个字符串并确保它是小写的。

它必须在这个阶段完成,因为精神可以从这一切中建造树。

所以我有这个规则

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:我已将问题分解以确保它正在处理一个字符而不是一系列字符,但它仍然无法处理相同的大量错误。

4

2 回答 2

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);    
    }   
};

极好的。这显然是因为我正在阅读一些旧文档。

于 2011-11-06T13:23:27.427 回答
-1

我很确定这条线qi::rule<std::string::iterator, std::string() >永远不会编译。你的意思是qi::rule<std::string::iterator, std::string >

于 2011-11-06T00:48:50.743 回答