例如一个类 Unit 具有三个功能:
class Unit{
void StandUp();
void SitDown();
void Die();
}
我有一个指针列表 list<Unit*> UnitList;
当我希望每个人都站起来时:
void EveryoneStandUp(){
for(list<Unit*> it = UnitList.begin(); it != UnitList.eng(); it++){
(*it)->StandUp();
}
}
现在如果我想让每个人都坐下来,我会复制上面的代码并更改 StandUp()
至 SitDown()
.对于我编写的每个新函数,如果我想让每个人都这样做,我的代码中就必须有另一个 for 循环体。
是否可以将这个 for 循环主体放在另一个函数中,每当我想从 UnitList 中的所有成员调用某个函数时都可以重用它?
我觉得这在其他地方一定有答案,我试过谷歌搜索但不知道我应该寻找哪些关键字。谢谢解答!
最佳答案
你可以这样做:
void Everyone(void (Unit::*method)())
{
for (std::list<Unit*>::iterator it = UnitList.begin(); it != UnitList.end(); it++){
((*it)->*method)();
}
}
然后调用它
Everyone(&Unit::StandUp);
但在 c++11 中,您的示例可能会重写为:
for (auto* unit : UnitList) {
unit->StandUp();
}
这看起来很清楚。
关于c++遍历列表以调用某个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24859679/