std::stringstream 作为函数的参数
我有一个 std::vector
并且我希望使用 std::for_each 来遍历这个向量并连接一个字符串,所以我炮制了以下构造:
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>
]
有人可以解释一下出了什么问题吗?
I have a std::vector<std::string> temp_results
and I wish to use std::for_each to go through this vector and concatenate a string, so I concocted the following construction:
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;
}
I get the following error, which is beyond my understanding:
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>
]
Could someone please explain what is wrong?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果通过编写
return ss.str;
您打算从std::stringstream
调用str
成员函数,那么您就缺少一对括号:此外,您的代码可能不会达到您的预期。如果您希望对
addup
的每次调用都在同一个std::stringstream
实例上工作,则必须通过引用来获取它:修改addup
签名并在boost::bind
中的ss
参数周围添加boost::ref()
。这是一个工作版本,我认为它符合您的期望:
使用
boost::lambda
的替代方案:If, by writing
return ss.str;
you intend to call thestr
member function fromstd::stringstream
, then you are missing a pair of parenthesis :Also, your code probably won't do what you expect. If you want every call to
addup
to work on the samestd::stringstream
instance, you have to take it by reference : modify theaddup
signature and add aboost::ref()
around thess
parameter in theboost::bind
.Here is a working version which I presume does what you expect :
An alternative using
boost::lambda
: