【发布时间】:2015-10-01 16:55:08
【问题描述】:
我正在编写一个小的事件管理器类,其中我将一些函数指针存储在一个向量中。我使用std::function<void(int)> 作为向量类型,我测试了在其中插入 lambdas 和普通函数,它可以工作:
void t(int p){
/*things*/
}
[...]
event.bind([](int p){/*things*/});
event.bind(t);
现在,(在某些时候我需要删除 lambdas 而不是函数,)我的问题是:
是否可以区分 lambda 和函数?如果是,如何?
编辑:
既然我澄清了我的疑问,这个问题就变成了标题所说的
【问题讨论】:
-
什么意思,删除 lambdas?为什么 lambda 的处理方式与函数指针不同?你的设计看起来……错了。
-
您可以改为将
std::pair和bool作为第二个参数,bool将表明它是函数指针还是 lambda。 -
如果你想区分 lambda 和函数指针,不要把它们放在一个向量中以同样的方式对待它们......(PS:+1 对 Yakk 的评论,如何:删除lambda 的?)
-
我认为 OP 意味着他们想从向量中“删除”它们...
-
@RomanHudylko ...这个指针在哪里?我没有看到指针。如果您以某种方式创建了一个指向 lambda 的指针(无论出于何种原因),如果您删除了指向自动存储中某些内容的指针(未使用
new分配),则您的程序格式错误。 Lambda 不是指针,Lambda 是带有operator()的匿名类型。闭包就是这种类型的实例。您可以使用类型擦除的奇迹将闭包存储在std::function按值中。