例如。一个类(class)单位具有三个功能:

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中的所有成员中调用某个函数,就可以重用该函数?

我觉得这肯定在其他地方有答案,我尝试了Google搜索,但是却不知道应该寻找哪个关键字。感谢您的回答!

最佳答案

您可以这样做:

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();
}

这似乎很清楚。

10-07 19:28