2
我在这里有一个递归的函数,但我反而想让它不递归。我只是不知道如何。使这个函数不递归?
void AguiWidgetManager::recursiveRender(const AguiWidget *root)
{
//recursively calls itself to render widgets from back to front
AguiWidget* nonConstRoot = (AguiWidget*)root;
if(!nonConstRoot->isVisable())
{
return;
}
clip(nonConstRoot);
nonConstRoot->paint(AguiPaintEventArgs(true,graphicsContext));
for(std::vector<AguiWidget*>::const_iterator it =
root->getPrivateChildBeginIterator();
it != root->getPrivateChildEndIterator(); ++it)
{
recursiveRender(*it);
}
for(std::vector<AguiWidget*>::const_iterator it =
root->getChildBeginIterator();
it != root->getChildEndIterator(); ++it)
{
recursiveRender(*it);
}
}
它可以,如果解决方案不会使用迭代器。
感谢
你知道,如果你使这个函数非递归,它将会被命名得很差。 – 2011-01-13 03:40:32
请问为什么?我认为递归可能是最简单的方法。迭代解决方案可能会使用堆栈并手动实现递归。另外,`std :: for_each(root-> getChildBeginIterator(),root-> getChildEndIterator(),recursiveRender);`看起来比你拥有的更好。 – 2011-01-13 03:44:55
@Chris Lutz`for_each`可能看起来更好,但除非我错误,因为函数是成员函数,所以需要`mem_fun_ref`活页夹或类似的东西来使它调用正确。 – 2011-01-13 04:00:49