【发布时间】:2009-06-21 13:22:55
【问题描述】:
我正在开发一个程序,我发现自己经常这样做:
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++ 是如何工作的,它是基于堆栈的,并且没有上下文信息来创建类似功能的完美闭包(这需要 VM 吗?)但至少比当前重复此代码改进 100 次编程。
【问题讨论】: