2011-10-04 46 views
2

在升壓::精神,我試圖用+(...)語法來匹配一個或多個字符串,喜歡這裏:在boost :: spirit中使用+運算符:char轉換錯誤?

#include <boost/config/warning_disable.hpp> 
#include <boost/spirit/include/qi.hpp> 

#include <iostream> 
#include <string> 

namespace client 
{ 
    namespace qi = boost::spirit::qi; 
    namespace ascii = boost::spirit::ascii; 

    template <typename Iterator> 
    bool parse(Iterator first, Iterator last) 
    { 
    using qi::char_; 

    qi::rule< Iterator, std::string(), ascii::space_type > text; 
    qi::rule< Iterator, std::string() > myword; 

    text = '"' >> +(myword) >> '"'; // ERROR! 
    myword = +char_; 

    bool r = qi::phrase_parse(first, last, text, ascii::space); 
    if (first != last) 
     return false; 
    return r; 
    } 
} 

但我發現了以下錯誤:

foo.cpp:20: instantiated from 'bool client::parse 
boost/spirit/home/qi/detail/assign_to.hpp:109: error: \ 
    invalid static_cast from type \ 
    'const std::basic_string<char, std::char_traits<char>, std::allocator<char> >' \ 
    to type 'char' 

不有人知道我做錯了什麼?

+0

嘗試使用'lit'或'char_'來包裝這些文字? –

+0

呃,國際海事組織這是運營商超載這樣一個醜陋的使用。 – orlp

+2

@nightcracker Boost.Spirit可能是最好的解析器生成器。當然是那些在語言中的人。 –

回答

1

你的代碼用Boost V1.47(Spirit V2.5)編譯得很好。在Spirit的這個版本中,屬性處理已經被完全重寫,解決了這個問題(還有很多其他問題)。

+0

哦,謝謝。我必須使用Boost 1.43。 :( – Frank