简短的问题。我不知道如何正确使用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(); }), ", ");

10-08 14:20