c++ - 使用 lambdas 做嵌套函数

标签 c++ c++11

大家对使用 lambda 在 C++ 中执行嵌套函数有何看法?例如,而不是这个:

static void prepare_eggs()
{
   ...
}

static void prepare_ham()
{
   ...
}

static void prepare_cheese()
{
   ...
}

static fry_ingredients()
{
   ...
}

void make_omlette()
{
    prepare_eggs();
    prepare_ham();
    prepare_cheese();
    fry_ingredients();
}

你这样做:

void make_omlette()
{
    auto prepare_eggs = [&]()
    {
       ...
    };

    auto prepare_ham = [&]()
    {
       ...
    };

    auto prepare_cheese = [&]()
    {
       ...
    };

    auto fry_ingredients = [&]()
    {
       ...
    };


    prepare_eggs();
    prepare_ham();
    prepare_cheese();
    fry_ingredients();
}

来自学习如何使用 Pascal 编码的一代,嵌套函数对我来说非常有意义。但是,在我以这种方式使用 lambda 的代码审查期间,这种用法似乎让我小组中一些经验不足的开发人员感到困惑。

最佳答案

我看不出嵌套函数本身有什么问题。我将 lambdas 用于嵌套函数,但前提是它满足某些条件:

  • 在不止一次的地方调用它。 (否则如果不是太长就直接写代码)
  • 它实际上是一个内部函数,因此在任何其他上下文中调用它都是没有意义的。
  • 足够短(最多 10 行)。

因此,在您的示例中,我不会将 lambdas 用于第一个原因。

概念上的嵌套函数很有用,原因与类中的私有(private)方法有用的原因相同。它们强制执行封装,并且更容易查看程序的结构。如果一个函数是其他函数的实现细节,那么为什么不明确地这样做呢?

我看到的最大问题是可读性;阅读具有大量嵌套和缩进的代码更加困难。此外,人们对 lambdas 还不是很满意,因此预计会有阻力。

关于c++ - 使用 lambdas 做嵌套函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9438874/

相关文章:

c++ - 轴对齐矩形测试中的点?

c++ - 如何在 Windows 公用文件对话框中显示 API 填充的虚拟文件夹

c++ - 添加带有参数包扩展的所有参数

c++ - 在变量或字段 'printVector' 声明为 void 之前缺少模板参数

c# - C#中的StringBuilder编码问题

c++ - 我如何从线程 ID 知道 PDH 的线程名称

c++ - C++中的顶级是什么?

c++ - 如何从 Eigen::Matrix 获取内存所有权?

c++ - 带有类的模板特化

c++ - 用 g++ 编译 C++11