gpt4 book ai didi

c++ - 传递模板函数以在没有 lambda 的情况下进行转换

转载 作者:太空狗 更新时间:2023-10-29 20:03:14 24 4
gpt4 key购买 nike

我目前有 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>
);

导致编译错误:

"error: expected ‘(’ before ‘>’ token".

如何在没有 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)
);

关于c++ - 传递模板函数以在没有 lambda 的情况下进行转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30588911/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com