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