简短的问题。我不知道如何正确使用 boost::adaptors::transformed
和 boost::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))), ", ");
另请注意,此重载中的 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/