c++遍历列表以调用某个函数

标签 c++ list function oop pointers

例如一个类 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/

相关文章:

c++ - 如何使用 WinApi 设置最小窗口大小

python - 在python中打印字典的原始输入顺序

c - 将新节点添加到列表时出现段错误

c++ - 使用函数操作结构数据类型的值

arrays - 改进基于输入数组的 UPSERT 函数

C++ 嵌套循环没有给我任何值

c++ - 如何在自定义容器中正确使用 std::allocator?

c++ - 如何在同一台计算机上同时安装多个版本的 llvm libc++(ubuntu)?

python - 如何在Python中减去2个字符串或列表?

c - 阿杜诺 C : undefined reference to `readArms()'