Повышение regex_match для string_ref

61
8

Я использую boost :: regex_match с boost :: string_ref, но сборка не удалась из-за ошибки вывода шаблона, как я могу это исправить?

 boost::smatch base;                                                                                                                      
boost::string_ref sr = "4f000000-4f015000 r-xp 00000000 03:01 12845071 /lib/ld-2.3.2.so";
boost::regex
re(R"(^([[:xdigit:]]+)-([[:xdigit:]]+)\s+..x.\s+([[:xdigit:]]+)\s+\S+:\S+\s+\d+\s+(\S+\.(so|dll|dylib|bundle)((\.\d+)+\w*(\.\d+){0,3})?)$)");
if (boost::regex_match(sr.cbegin(), sr.cend(), base, re)) {
std::cout << base[0] << std::endl;
}

Ошибка компилятора:

/usr/include/boost/regex/v4/regex_match.hpp|44 col 6 | примечание: кандидат: шаблон bool boost :: regex_match (BidiIterator, BidiIterator, boost :: match_results &, const boost :: basic_regex &, boost :: regex_constants :: match_flag_type)
|| bool regex_match (сначала BidiIterator, затем BidiIterator,
|| ^
/usr/include/boost/regex/v4/regex_match.hpp|44 col 6 | примечание: вычет/замена аргумента шаблона не удалась:
regex.cpp | 161 col 58 | примечание: вывели конфликтующие типы для параметра 'Iterator' ('const char *' и '__gnu_cxx :: __ normal_iterator>')

спросил(а) 2019-03-14T06:15:00+03:00 11 месяцев, 2 недели назад
1
Решение
70

boost::smatch - это псевдоним match_results<std::string::const_iterator>, поэтому решение:

boost::match_results<boost::string_ref::const_iterator> base;

ответил(а) 2019-03-14T06:21:00+03:00 11 месяцев, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема