在没有lambda的情况下传递模板函数来转换

Pass template function to transform without lambda

本文关键字:函数 转换 lambda 情况下      更新时间:2023-10-16

我目前有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".

我在另一篇文章"将vector - double转换为vector - string-优雅的方式"中读到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)
);