У меня проблемы с функцией форматирования в boost :: regex_replace
. Я могу вызвать ее версию с одним параметром, но не с двумя параметрами:
e = "(^|>)([^<>]+)";
h_str = regex_replace(h_str, e, repl_quot, boost::match_default);
Где repl_quot
определяется как
std::string const &repl_quot(boost::smatch const &what) {
boost::regex e("\"");
std::string repl(""");
static std::string;
str = regex_replace(what[0].str(), e, repl, boost::match_default);
return str;
}
Вышеупомянутое работает, но я действительно не хочу использовать эту статическую переменную, поэтому я попробовал то, что считал приемлемой альтернативной версией с двумя параметрами:
std::string const &repl_quot2(boost::smatch const &what, std::string &out) {
boost::regex e("\"");
std::string repl(""");
out = regex_replace(what[0].str(), e, repl, boost::match_default);
return out;
}
Но regex_replace выиграл 'Не принимаю это (запутанная ошибка компилятора). Я пытаюсь использовать версию с двумя параметрами на основе следующего из документации Boost :: Regex
:
шаблон basic_string regex_replace (константа basic_string & s, const basic_regex & e, Форматирование FMT, match_flag_type flags = match_default);
Требуется Тип Formatter должен быть либо ... унарный, двоичный или тернарный функтор, который вычисляет заменяющую строку из вызов функции: либо fmt (what) which должен вернуть контейнер char_type для использования в качестве текста замены, или либо fmt (что, out), либо fmt (что, out, flags), оба из которых пишут текст замены на * out, а затем вернуть новый OutputIterator должность. В каждом случае каков match_results объект, представляющий string & (* const) (const boost :: smatch &, std :: string &) '