简短的问题。我不知道如何正确使用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))), ", ");
看到它 Live On Coliru
还要注意,此重载中的
to_string()
可能会抛出。使用c++ 11时,更喜欢lambda语法:
boost::algorithm::join(
addresses |
transformed([](address_v4 const& a) { return a.to_string(); }), ", ");