如何使用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);