【发布时间】:2014-11-04 12:55:45
【问题描述】:
我有一个基于此处显示的代码的类: http://geekswithblogs.net/raccoon_tim/archive/2011/09/28/lambdas-and-events-in-c.aspx
不同之处在于我使用的是可变参数模板。
效果很好,但我无法从向量中删除回调,因为我找不到它。
要么我得到一个错误,要么我得到一些我无法比较以找到元素的奇怪值。
不起作用的代码是:
for (auto i = this->handler.begin(); i != this->handler.end(); i++) {
if ((*i).target<void(Args...)>() == f.target<void(Args...)>()) {
this->handler.erase(i);
break;
}
}
我用谷歌搜索了很多,但我找不到任何适合这种情况的东西。例如 std::find 在我的情况下不起作用。
感谢任何帮助。
西尔伯林
编辑: 据我发现的主要问题是 std::function 不支持 == 和 != 的原因。有没有办法解决这个问题?没有一种方法可以识别 lambda,所以我可以再次删除它?我的意思是,至少它在内存中有一个位置。 .target_type() 是我试图找出的另一种方法,但它会导致一些“尝试引用已删除的函数”
【问题讨论】:
标签: c++11 vector lambda closures