Boost:bind疑问

kgzhw 2012-07-11 06:21:16
class status {
std::string name_;
bool ok_;
public:
status(const std::string& name):name_(name),ok_(true) {}
void break_it() { ok_=false; }
bool is_broken() const { return ok_; }
void report() const { std::cout << name_ << " is " << (ok_ ? "working nominally":"terribly broken") << '\n'; }
};


void main()
{

std::vector<status> statuses;
statuses.push_back(status("status 1"));
statuses.push_back(status("status 2"));
statuses.push_back(status("status 3"));
statuses.push_back(status("status 4"));
statuses[1].break_it();statuses[2].break_it();
for (std::vector<status>::iterator it=statuses.begin(); it!=statuses.end();++it) { it->report();}
std::for_each( statuses.begin(), statuses.end(), boost::bind(&status::report,_1));
}

report函数是不需要参数的,foreach那句代码中后面“_1”是什么意思?请高手指点一下!
...全文
118 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
kgzhw 2012-07-12
  • 打赏
  • 举报
回复
3Q!
[Quote=引用 3 楼 的回复:]

表示第一个参数你不关心,只需占位让代码能编译过去即可
[/Quote]
kgzhw 2012-07-12
  • 打赏
  • 举报
回复
3Q!
[Quote=引用 1 楼 的回复:]

楼主还是自己去认真看boost的文档吧,有中文版的。
这是一个神奇的占位符。
[/Quote]
kgzhw 2012-07-12
  • 打赏
  • 举报
回复
std::for_each( statuses.begin(), statuses.end(), boost::bind(&status::report,_1));

我想我已经找到答案了,首先for_each会每次传递一个statusdui对象给bind,而bind一个成员函数指针是第一参数必须是对象的实例this,所以_1这个占位符代表这个实例对象。如果不用for_each可能好理解一些。
for(iterator<status> itr = statuses.begin(); itr != statuses.end(), ++itr)
{
boost::bind(&status::report, _1)(itr);
}
hurryboylqs 2012-07-11
  • 打赏
  • 举报
回复
表示第一个参数你不关心,只需占位让代码能编译过去即可
hurryboylqs 2012-07-11
  • 打赏
  • 举报
回复
你可以看下bind的源码,就是一个占位符,你不加就编译不过去的,表示
taodm 2012-07-11
  • 打赏
  • 举报
回复
楼主还是自己去认真看boost的文档吧,有中文版的。
这是一个神奇的占位符。

64,652

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧