c++ - 在 C++ 中迭代对象名称

标签 c++ arrays object iteration objectname

<分区>

如何遍历数组来操作或访问不同的对象及其成员函数?我有 10 个对象。现在我有相同的代码访问每个对象成员函数和操作基本上为每个对象复制和粘贴的对象数据。我只是想知道是否有一种方法可以使用循环来编写一次该代码并让它循环遍历所有 10 个对象。

而不是像下面这样手动操作:

Color red.set();
Color green.set();
Color blue.set();
Color yellow.set();
Color purple.set();
      ...

有没有办法用循环来做到这一点,比如下面这样:

colors[5] = {"red", "green", "blue", "yellow", "purple", ...};

for(int i = 0; i < 10; i++){
    Color colors[i].set();
}

我知道 PHP 做类似的事情是这样的:

$colors = array("red", "green", "blue", "yellow", "purple" ...);

for($i = 0; $i < 10; $i++){
    ${$colors[$i]} = $colors[$i];
    // $red = "red";
}

是否可以为 C++ 执行此操作?

下面是另一个例子,说明我为什么要问这个问题以及我要问的是什么:而不是:

if(grid[row][col].ship == "red")
{
    red.setShipDamage();

    if(red.getShipSunk() == true)
        red.destroy();
}
else if(grid[row][col].ship == "green")
{
    green.setShipDamage();

    if(green.getShipSunk() == true)
        green.destroy();
}
else if( ... )

循环执行所有这些操作:

for(int i = 0; i < 10; i++)
{
    if(grid[row][col].ship == colors[i])
    {
        **colors[i]**.setShipDamage();

        if(**colors[i]**.getShipSunk() == true)
            **colors[i]**.destroy();
    }
}

最佳答案

你需要做这样的事情:

std::map<std::string, Color*> colors;
colors["red"] = &red;
colors["green"] = &green;
colors["blue"] = &blue;
colors["purple"] = &purple;

///....
Color *color = colors[grid[row][col].ship];
color->setShipDamage();
if(color->getShipSunk() == true)
    color->destroy();

希望对你有帮助。

关于c++ - 在 C++ 中迭代对象名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12307935/

相关文章:

python - 如何使用 Requests 和 JSON 打印变量

c++ - 在矩阵乘法 C++ SIMD 编程中检测到 Stack Smashing

java - 如何通过 Google Cloud Endpoints 接收 <ArrayList>?

java - 如何声明二维字符串数组列表?

arrays - Ruby each_slice 到子数组中,如果最后一个子数组的大小与其他子数组不同,则设置默认元素值

JavaScript:插入对象内的数组?

添加到 std::map 的 C++ 宏

c++ - 多维数组

c++ - 有没有更简单的方法来调用 “funnel”?

java - KML的字符串需要转换为java对象