c++ - 通过 boost::algorithm::join 和 boost::adaptors::transformed 转换 std::vector of boost.asio::ip::address

标签 c++ boost functional-programming

简短的问题。我不知道如何正确使用 boost::adaptors::transformedboost::algorithm::join。以下不起作用:

boost::algorithm::join(addresses |
                       boost::adaptors::transformed(std::mem_f(&boost::asio::ip::address_v4::to_string)), ", ");

我不明白 boost::adaptors::transformed 的语法。如何为 std::vector 中的每个对象调用 memeber 函数?

目前我正在手动连接字符串,但我更喜欢上面概述的函数式方法。

谢谢。

最佳答案

to_string 有重载,所以你需要指定你想要的(使用 static_cast)

boost::algorithm::join(
        addresses | 
        transformed(std::mem_fn(static_cast<std::string (address_v4::*)() const>(&boost::asio::ip::address_v4::to_string))), ", ");

查看 Live On Coliru

另请注意,此重载中的 to_string() 可能会抛出异常。


对于 c++11,更喜欢 lambda 语法:

boost::algorithm::join(
        addresses | 
        transformed([](address_v4 const& a) { return a.to_string(); }), ", ");

关于c++ - 通过 boost::algorithm::join 和 boost::adaptors::transformed 转换 std::vector of boost.asio::ip::address,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26482153/

相关文章:

c++ - boost::function 类

functional-programming - 如何在不创建闭包的情况下调用多参数函数?

c++ - 应用于单词数组的随机数范围

c++ - 隐式虚拟性传播的原因是什么?

c++ - 重定向到 C++ 中的网页

programming-languages - Scala "continuations"只是用于定义和使用回调函数的时髦语法吗?

functional-programming - 我在我的 Lisp 程序中收到的警告很少,但我不知道如何解决它们

c++ - 是定义函数?

c++ - 从函数返回字符数组

multidimensional-array - 转换boost::detail::multi_array::mutable_iterator_tag to std::random_access_iterator_tag