如何使用boost::spirit中的'c_escape_ch_p'解析转义字符串?

如何使用boost::spirit中的'c_escape_ch_p'解析转义字符串?,boost,escaping,boost-spirit,Boost,Escaping,Boost Spirit,我试图使用boost::spirit中的c\u escape\u chu p(请参阅)来解析转义的c++字符串。但我得到了一个编译器错误。这是我的密码: #include <boost/config/warning_disable.hpp> #include <boost/spirit/include/qi.hpp> #include <boost/spirit/home/classic/utility/escape_char.hpp> #include &l

我试图使用
boost::spirit
中的
c\u escape\u chu p
(请参阅)来解析转义的
c++
字符串。但我得到了一个编译器错误。这是我的密码:

#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;
}
所以,它说这不是一个有效的表达式。如何正确使用它


附言:我正在使用Boost 1.45。

您正在尝试将经典(旧版,V1,…)Boost::spirit::classic和(新版,V2)Boost::spirit::qi结合起来

这是行不通的。更新的内容是一个完整的、不兼容的重写。请参阅文档中的“从Spirit 1.8.x移植”注释。 关于如何使用boost::spirit::qi解析转义的C/C++字符串的问题,下面的文章将很有帮助:

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