简短的问题。我不知道如何在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函数
目前我手动连接字符串,但我更喜欢上面概述的功能方法。
谢谢。
发布于 2014-10-21 08:39:16
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))), ", ");看吧,住在Coliru
还请注意,此重载中的to_string()可能会抛出。
对于c++11,更喜欢lambda语法:
boost::algorithm::join(
addresses |
transformed([](address_v4 const& a) { return a.to_string(); }), ", ");发布于 2014-10-21 10:07:17
@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();
}),
", "))https://stackoverflow.com/questions/26482153
复制相似问题