提高regex_match的string_ref

时间:2019-03-14 03:15:39

标签: c++ boost

我在使用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>')

1 个答案:

答案 0 :(得分:0)

boost::smatchmatch_results<std::string::const_iterator>的别名,因此解决方案:

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