gpt4 book ai didi

c++ - Ruby block ,C++ 中的 java 闭包

转载 作者:太空狗 更新时间:2023-10-29 19:40:05 25 4
gpt4 key购买 nike

我正在开发一个程序,我发现自己经常这样做:

void Model::SetCollideMode( const std::string &m )
{
Body *body;

std::map<std::string, Body* >::iterator iter;

for (iter=this->bodies.begin(); iter!=this->bodies.end(); iter++)
{
body = iter->second;

body->SetCollideMode( m );
}
}

我在几个对象中有几个类似的方法,基本上将一个属性应用于它的所有子对象。来自 Ruby 世界,我渴望做这样的事情:

for_all_bodies{ body->SetCollideMode(m) }

有没有办法让这段代码更像闭包或者以其他方式改进它?

我知道 C++ 是如何工作的,它是基于堆栈的,没有上下文信息来创建一个完美的闭包功能(这需要一个虚拟机?)但至少比当前重复此代码 100 次的那种编程。

最佳答案

在 C++0x 中,是的。 See here.正如您所猜测的那样,它们是以典型的 C++ 方式完成的,即如果您不小心关闭了一个堆栈变量,然后让 lambda 对象比堆栈存活的时间更长,那么您就有了未定义的行为。这是一种让您的程序崩溃的全新方法!但这是不公平的 - 在许多方面,它们比许多其他语言中的 lambda 更复杂,因为您可以声明允许它们改变状态的程度。

在那之前,there have been attempts to emulate the same thing ,但它们带来的麻烦可能大于它们的值(value)。

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

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