所以,我看到lambda函数在用于替换仿函数时的用处,但是什么时候你想在面向对象的编程(使用类)设置中使用它们,为什么?
答案 0 :(得分:0)
好的,比我的评论更多(而且更少)有用的回应。
闭包(即在其他函数中声明的函数,捕获外部函数的变量)是实现类的一种有趣的反向通道方式。观看:
auto MakeCounter(int initialCount)
{
int currentCount = initialCount;
struct {
std::function<void()> increment = [&]() { currentCount++; };
std::function<int()> getCount = [&]() { return currentCount; };
} theCounter;
return theCounter;
}
现在theCounter
是一个有两个成员的结构,一个用于递增计数,另一个用于检索当前计数。请注意,struct本身不需要存储当前计数;而是由两个lambdas隐含地保持,它们之间共享currentCount
。
这有一些问题。
然而,你在其他语言中看到这种模式,它支持(正确)闭包和GC,但是没有类的本机设施(例如LISP的某些变体),或者支持类但是如此糟糕以至于它可以说是更好地以这种方式做事(例如Matlab)。
所以在C ++中,它们只是用于替换仿函数样板。它们不提供任何额外的电力。在其他一些语言中,它们更具通用性,而且更为广泛。