首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过boost::algorithm::join和boost::boost.asio::ip::address::Transform转换std:boost.asio::ip::address向量

通过boost::algorithm::join和boost::boost.asio::ip::address::Transform转换std:boost.asio::ip::address向量
EN

Stack Overflow用户
提问于 2014-10-21 08:28:52
回答 2查看 214关注 0票数 1

简短的问题。我不知道如何在boost::adaptors::transformed中正确地使用boost::algorithm::join。以下内容不起作用:

代码语言:javascript
复制
boost::algorithm::join(addresses |
                       boost::adaptors::transformed(std::mem_f(&boost::asio::ip::address_v4::to_string)), ", ");

我不理解boost::adaptors::transformed的语法。如何为std::vector中的每个对象调用memeber函数

目前我手动连接字符串,但我更喜欢上面概述的功能方法。

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-21 08:39:16

to_string有重载,所以您需要指定您想要的(使用static_cast)。

代码语言:javascript
复制
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语法:

代码语言:javascript
复制
boost::algorithm::join(
        addresses | 
        transformed([](address_v4 const& a) { return a.to_string(); }), ", ");
票数 4
EN

Stack Overflow用户

发布于 2014-10-21 10:07:17

@sehe的回答是绝对正确的。我只是想补充一下,通过执行以下操作,您可能希望使用基类boost::asio::ip::address而不是专门化boost::asio::ip::address_v4

代码语言:javascript
复制
boost::algorithm::join(
    addresses |
        boost::adaptors::transformed(
            [](boost::asio::ip::address const &kIpAddress) {
              return kIpAddress.to_string();
            }),
    ", "))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26482153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档