Использование boost :: lexical_cast с std :: transform - PullRequest
5 голосов
/ 14 июня 2011

g ++ не нравится:

vector<int> x;
x += 1,2,3,4,5;

vector<string> y(x.size());
transform(x.begin(), x.end(), y.begin(), lexical_cast<string>);

Сообщение об ошибке:

error: no matching function for call to 'transform(__gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<std::basic_string<char, std::char_traits<char>, std::allocator<char> >*, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, <unresolved overloaded function type>)'

Что ясно указывает на наличие проблемы с lexical_cast в качестве последнего аргумента для преобразования ...Есть ли способ избежать написания функционального объекта, который упаковывает lexical_cast?

Спасибо!

1 Ответ

7 голосов
/ 14 июня 2011

Это не проверено, но вы можете попробовать:

transform(x.begin(), x.end(), y.begin(), lexical_cast<string, int>);

lexical_cast - это шаблон с двумя параметрами шаблона.Обычно второй выводится из вывода типа из аргумента, но вы не предоставляете аргумент, поэтому вам нужно явно указать его.

...