2011-12-08 16 views
0

boost::spiritからc_escape_ch_phere参照)を使用して、エスケープされたC++文字列を解析しようとしています。しかし、コンパイラエラーが発生しています。ここに私のコードは次のとおりです。boost :: spiritから `c_escape_ch_p`を使ってエスケープ文字列を解析するには?

// Report invalid expression error as early as possible.                
    // If you got an error_invalid_expression error message here,              
    // then the expression (expr) is not a valid spirit qi expression.             
    BOOST_SPIRIT_ASSERT_MATCH(qi::domain, Expr); 

ので、それはそれは有効な式ではありません言う:

#include <boost/config/warning_disable.hpp> 
#include <boost/spirit/include/qi.hpp> 
#include <boost/spirit/home/classic/utility/escape_char.hpp> 
#include <boost/spirit/home/classic/utility/confix.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; 

    using namespace boost::spirit::classic; 
    qi::rule<Iterator, std::string()> myword2 = 
     confix_p('"', *c_escape_ch_p, '"') ; // ERROR! 
    text = myword2; 

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

int main() { 
    std::string s = "\"foo\""; 
    bool ok = client::parse(s.begin(), s.end()); 
    std::cout << "OK? " << (ok ? "y" : "n") << std::endl; 
    return 0; 
} 

コンパイルエラーがconfixでラインからインスタンス化失敗した静的アサートです。どのように正しく使用されていますか?

P .:私はBoost 1.45を使用しています。

答えて

1

古典的な(古い、V1、...)boost :: spirit :: classicと(新しい、V2)boost :: spirit :: qiを組み合わせようとしています。

これはうまくいきません。新しいものは、完全で互換性のない、書き直しです。ドキュメンテーションの「Spirit 1.8.xからの移植」ノートを参照してください。ブースト::精神::気を使用してエスケープC/C++文字列を解析する方法に関するご質問については 、次の記事が参考になります

Parsing Escaped String Input Using Spirit.Qi

関連する問題