Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > boost::algorithm::replace_all() и форматировщик


Автор: boostcoder 16.7.2010, 15:55
всем привет.
смотрим доку тут: http://www.boost.org/doc/libs/1_43_0/doc/html/string_algo/design.html#string_algo.replace
и тут: http://www.boost.org/doc/libs/1_43_0/doc/html/string_algo/concept.html#string_algo.formatter_concept
т.е. я так понимаю, http://www.boost.org/doc/libs/1_43_0/doc/html/string_algo/concept.html#string_algo.formatter_concept применяется к результирующей строке, а в качестве аргумента получает то, что вернул http://www.boost.org/doc/libs/1_43_0/doc/html/string_algo/concept.html#string_algo.finder_concept.
но что-то у меня не получается передать форматировщик.

пример:
Код

/***************************************************************************/

struct formater {
   formater(const std::string& e):exp(e) {}

   template<typename T>
   std::string operator()(const T& v) const {
      return exp + v;
   }

private:
   const std::string& exp;
};

/***************************************************************************/

int main(int argc, char** argv) {
   std::string src("a$ bc$d"), exp("exp^");
   boost::algorithm::replace_all(src, "$", formater(exp));

   return 0;
}

/***************************************************************************/


получаю это:
Цитата

In function 'void boost::algorithm::replace_all(SequenceT&, const Range1T&, const Range2T&) [with SequenceT = std::basic_string<char>, Range1T = char [2], Range2T = formater]': 
include/boost/algorithm/string/replace.hpp:654:13: error: no matching function for call to 'const_formatter(const formater&)' 

что не так?

Автор: bsa 18.7.2010, 19:01
replace_all() третьим параметром принимает строку.
Думаю, тебе нужно использовать find_format_all() вместо replace_all():
Код
std::string src("a$ bc$d"), exp("exp^");
find_format_all_copy( 
            src,
            first_finder("$", is_iequal()), 
            formatter(exp) );

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)