spirit :: qi :: грамматическое имя с другим размером символа - PullRequest
1 голос
/ 28 января 2012

Я делаю парсер с 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 isожидая только const std :: string & в качестве второго параметра.У меня вопрос, как я могу сказать qi :: grammar ожидать строку с размером значения Iterator value_type?

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

1 Ответ

0 голосов
/ 28 января 2012

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

    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 - это необязательная строка, которая дает грамматике имя, полезное для отладки и обработки ошибок.

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

...