Jul*_*lia 3 c++ lambda templates c++11
我目前有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);
}
Run Code Online (Sandbox Code Playgroud)
哪个可以用作:
std::vector<int> is{-1, 2, 62, 4, -86, 23, 8, -0,2};
std::cout << to_string_join(begin(is), end(is), ", ") << std::endl;
Run Code Online (Sandbox Code Playgroud)
要输出:
"-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>
);
Run Code Online (Sandbox Code Playgroud)
这导致编译错误:
"错误:预期'('之前'>'令牌".
如何在没有lambda的情况下传递to_string?
发生错误是因为std::to_string它不是函数模板.你正在寻找一个static_cast,而不是模板参数.
std::transform(
first, last, begin(ss),
static_cast<std::string(*)(typename std::iterator_traits<IteratorIn>::value_type)>(std::to_string)
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
384 次 |
| 最近记录: |