gpt4 book ai didi

c++ - std::stringstream 作为函数的参数

转载 作者:太空狗 更新时间:2023-10-29 21:07:45 27 4
gpt4 key购买 nike

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

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;
}

我收到以下错误,这超出了我的理解范围:

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>
]

谁能解释一下哪里出了问题?

最佳答案

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

return ss.str();

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

这是一个工作版本,我认为它可以满足您的期望:

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 的替代方法:

std::for_each(temp_results.begin(), temp_results.end(), ss << boost::lambda::_1 << ';');

关于c++ - std::stringstream 作为函数的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4447980/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com