Проблемы с функцией форматирования двух параметров в boost :: regex_replace

У меня проблемы с функцией форматирования в 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("&#34;");
    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("&#34;");
    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 &) '

7
задан Alan Moore 12 February 2011 в 14:03
поделиться