首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >std::stringstream作为函数的参数

std::stringstream作为函数的参数
EN

Stack Overflow用户
提问于 2010-12-15 16:21:42
回答 1查看 4K关注 0票数 3

我有一个std::vector<std::string> temp_results,我希望使用std::for_each遍历这个向量并连接一个字符串,所以我构造了以下结构:

代码语言:javascript
复制
std::stringstream ss;
std::string res = std::for_each(temp_results.begin(), temp_results.end(), boost::bind(addup, _1, ss));

std::string addup(std::string str, std::stringstream ss)
{
    ss << str;
    ss << ";";

    return ss.str;
}

我得到了以下错误,这超出了我的理解:

代码语言:javascript
复制
error C2475: 'std::basic_stringstream<_Elem,_Traits,_Alloc>::str' : forming a pointer-to-member requires explicit use of the address-of operator ('&') and a qualified name
        with
        [
            _Elem=char,
            _Traits=std::char_traits<char>,
            _Alloc=std::allocator<char>
        ]

有人能解释一下出了什么问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-12-15 16:25:44

如果您打算通过编写return ss.str;std::stringstream调用str成员函数,那么您将缺少一对括号:

代码语言:javascript
复制
return ss.str();

此外,您的代码可能不会执行预期的操作。如果您希望每个对addup的调用都在同一个std::stringstream实例上工作,则必须通过引用来实现:修改addup签名,并在boost::bind中的ss参数周围添加一个boost::ref()

这是一个工作版本,我认为它做了你所期望的:

代码语言:javascript
复制
void addup(std::string str, std::stringstream &ss)
{
    ss << str;
    ss << ";";
}

int main() 
{
    std::vector<std::string> temp_results;
    /* ... */

    std::stringstream ss;
    std::for_each(temp_results.begin(), temp_results.end(), boost::bind(addup, _1, boost::ref(ss)));
    std::cout << ss.str() << std::endl;
}

另一种使用boost::lambda的方法:

代码语言:javascript
复制
std::for_each(temp_results.begin(), temp_results.end(), ss << boost::lambda::_1 << ';');
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4447980

复制
相关文章

相似问题

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