简短的问题。我不知道如何正确使用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函数?
目前我手动连接字符串,但我更喜欢上面概述的功能方法。
感谢。
答案 0 :(得分:4)
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(); }), ", ");
答案 1 :(得分:0)
@ sehe的回答绝对正确。我只是想添加一个人可能想要使用基类boost::asio::ip::address
而不是专业化boost::asio::ip::address_v4
,方法是执行以下操作:
boost::algorithm::join(
addresses |
boost::adaptors::transformed(
[](boost::asio::ip::address const &kIpAddress) {
return kIpAddress.to_string();
}),
", "))