spirit::qi:: грамматическое имя с различным размером символа

Я делаю парсер с spirit::qi и стремлюсь сделать его совместимым с разными размерами символов.

template < typename Iterator >
struct grammar : qi::grammar < Iterator >
{
    grammar () : grammar::base_type ( file, alter_string_size_to < Iterator::value_type > ( _szFile ) )
    {

    }

    qi::rule < Iterator > file;
};

При условии

alter_string_size_to < Iterator::value_type > ( _szFile )

успешно возвращает указатель на строку, содержащую _szFile с требуемым размером символа.

Когда я собираю с

Iterator = std::wstring::const_iterator

Я получаю следующее сообщение об ошибке

cannot convert parameter 2 from 'unsigned short *' to 'const std::string &'

Так что.. grammar::base_type ожидает только const std::string & в качестве второго параметра. У меня вопрос, как я могу сказать qi::grammar ожидать строку с размером значения Iterator value_type?

Заранее спасибо!

1 ответ

Решение

В источнике это определяется следующим образом:

    grammar(
        start_type const& start
      , std::string const& name_ = "unnamed-grammar")
    : proto::extends<terminal, base_type>(terminal::make(reference_(start)))
    , name_(name_)
    {}

    std::string name_;

Так что ты не можешь. Как указано в документе:

name - это необязательная строка, которая дает грамматике имя, полезное для отладки и обработки ошибок.

Таким образом, вам придется сделать свой собственный поиск на основе этого.

Другие вопросы по тегам