Jor*_*rdi 3 c++ closures iterator stl
我正在开发一个程序,我发现自己这样做了很多:
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 );
}
}
Run Code Online (Sandbox Code Playgroud)
我在几个对象中有几个方法,基本上将属性应用于其所有子节点.来自Ruby世界我很想做类似的事情:
for_all_bodies{ body->SetCollideMode(m) }
Run Code Online (Sandbox Code Playgroud)
无论如何,要使这个代码更像闭包或以其他方式改进它?
我意识到C++是如何工作的,它是基于堆栈的,并且没有上下文信息来创建一个完美的闭包函数(这需要一个VM?)但至少要改进当前重复这段代码的100次编程.
在C++ 0x中,是的.看这里.正如您所猜测的那样,它们是以特有的C++方式完成的,即如果您不小心关闭堆栈变量然后让lambda对象比堆栈存活更长时间,那么您有未定义的行为.这是让程序崩溃的全新方式!但这是不公平的 - 在很多方面它们比许多其他语言中的lambdas更复杂,因为你可以声明允许它们改变状态的程度.
在那之前,有人试图模仿同样的事情,但他们可能比他们的价值更麻烦.