Использование оператора + в boost :: spirit: char приведение к ошибке? - PullRequest
2 голосов
/ 05 октября 2011

В boost :: spirit я пытаюсь использовать синтаксис +(...) для соответствия одной или нескольким строкам, как здесь:

#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'

Кто-нибудь знает, что я делаю не так?

1 Ответ

1 голос
/ 05 октября 2011

Ваш код прекрасно компилируется с Boost V1.47 (Spirit V2.5). В этой версии Spirit обработка атрибутов была полностью переписана, что устраняет эту проблему (и много других проблем).

...