将boost::lexical_cast与std::transform一起使用

Using boost::lexical_cast with std::transform

本文关键字:transform 一起 std cast boost lexical      更新时间:2023-10-16

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的函数对象?

谢谢!

这是未经测试的,但您可以尝试:

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

lexical_cast是一个具有两个模板参数的模板。通常情况下,第二个是从参数的类型推导得出的,但您没有提供参数,因此需要显式指定它。