gpt4 book ai didi

c++ - C++ 中的闭包

转载 作者:太空狗 更新时间:2023-10-29 23:27:15 24 4
gpt4 key购买 nike

我发现自己在精神上处于一个陌生的地方。在 C++ 项目中,我渴望闭包。

背景。有一个带有公共(public) Render 方法的 Document 类型类,它生成一个深度调用树。有一些仅在渲染期间才有意义的 transient 。现在它像常规成员变量一样驻留在类中。然而,这在某些层面上并不令人满意——此数据仅在渲染调用期间才有意义,为什么要一直存储它?在参数中传递它会很丑陋——那里大约有 15 个变量。传递结构会在较低级别的方法中添加很多“RenderState->...”。

那我想要什么?我想要这个世界,就像我们所有人一样。具体来说,一组变量是:

  • 可用于类中的某些方法(不是全部)
  • 可单独通过名称访问(没有 pState->... 东西 - 因此重构很容易)
  • 不会在每次方法调用时都复制
  • 仅在方法调用期间及其调用树上存活(假设树长大)
  • 依靠堆栈生存

我知道我可以使用 C++ 拥有其中的一些属性 - 但不是全部。告诉我我没有变得怪异。

哎呀,在 Pascal 中,嵌套函数给了你所有的一切......

那么,在 C++ 中模拟闭包并获得尽可能多的上述好处的好的解决方法是什么?

最佳答案

标准 C++ 自 C++11提供 native lambda 表达式和几个编译器(至少 VC10+ GCC 和 clang)实现它。

对于 GCC 和 Clang,您可以使用“--std=c++11”激活它(或使用更高版本的 C++,如果可用)。 VC10 及更高版本无需标志即可激活它。

顺便说一句,你也可以使用boost::lambda (这并不完美,但适用于 C++03)还在 C++ 中提供了 lambda。

关于c++ - C++ 中的闭包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2009478/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com