【发布时间】:2015-06-02 06:29:51
【问题描述】:
我目前有c++11的功能:
template<class IteratorIn>
std::string to_string_join(IteratorIn first, IteratorIn last, std::string joiner) {
std::vector<std::string> ss(last - first);
std::transform(
first, last, begin(ss),
[](typename std::iterator_traits<IteratorIn>::value_type d) {
return std::to_string(d);
}
);
return boost::algorithm::join(ss, joiner);
}
可以这样使用:
std::vector<int> is{-1, 2, 62, 4, -86, 23, 8, -0,2};
std::cout << to_string_join(begin(is), end(is), ", ") << std::endl;
输出:
"-1, 2, 62, 4, -86, 23, 8, 0 ,2".
我在另一篇 SO 帖子 "convert-vectordouble-to-vectorstring-elegant-way" 中读到不需要 lambda。但是我无法实现删除 lambda。
我怀疑它应该看起来像这样:
std::transform(
first, last, begin(ss),
std::to_string<typename std::iterator_traits<IteratorIn>::value_type>
);
导致编译错误:
“错误:在‘>’标记之前需要‘(’”。
如何在没有 lambda 的情况下传递 to_string?
【问题讨论】:
标签: c++ templates c++11 lambda