lambda函数什么时候对C++中的类有用

When would lambda functions be useful for classes in C++?

本文关键字:有用 C++ 函数 什么时候 lambda      更新时间:2023-10-16

因此,当lambda函数用于替换函子时,我看到了它们的有用性,但通常情况下,您希望何时在面向对象编程(带类)设置中使用它们,为什么?

好吧,这是一个比我的评论更有帮助(也更少)的回应。

闭包(也就是说,在其他函数中声明的函数,它们捕获外部函数的变量)是实现类的一种有趣的反向通道方式。手表:

auto MakeCounter(int initialCount)
{
    int currentCount = initialCount;
    struct {
        std::function<void()> increment = [&]() { currentCount++; };
        std::function<int()> getCount = [&]() { return currentCount; };
    } theCounter;
    return theCounter;
}

现在theCounter是一个有两个成员的结构,一个成员递增计数,另一个成员检索当前计数。请注意,结构本身不需要存储当前计数;而是由在它们之间共享currentCount的两个Lambda隐式地持有。

这有一些问题。

  1. 它不可编译。甚至大部分都没有。这个代码片段有很多错误。事实上,它崩溃了GCC 4.9。哇
  2. 即使它进行了编译,它也不会正常工作,因为C++闭包的功能不是很强大——它们无法在作用域结束后保持捕获的变量的活力。只有具有实际GC的语言才能做到这一点
  3. C++已经有了类,为什么还要麻烦呢

尽管如此,在其他语言中也可以看到这种模式,它们要么支持(适当的)闭包和GC,但没有类的本地功能(例如LISP的一些变体),要么支持类,但非常糟糕,可以说这样做更好(例如Matlab)。

所以在C++中,它们只是用来替换函子样板。他们不提供任何额外的动力。在其他一些语言中,它们更通用,也更重要。