0

我正在构建一个小型 C++ 游戏(使用 SFML,但这在大多数情况下无关紧要),并且我正在更改一些代码以使其更可重用。我想制作一种方法来移动存储在数组中的一堆形状。

假设我们有一个名为Shape的类,以及另一个名为Rectangle的子类。我希望该功能适用​​于任何形状。这可能吗?我想我可以像你在下面看到的那样做一些事情,但是除非我更改第一个参数以获取一个矩形数组,否则它会使游戏崩溃。

void shift_shapes(Shape *shapes, int num_shapes, int x_offset, int y_offset)
{
    for (int i = 0; i < num_shapes; i++)
        shapes[i].move(x_offset, y_offset);
}

Rectangle rects[100];
// *Add 100 rectangles*
shift_shapes(rects, 100, 10, 5);

谢谢您的帮助!

4

1 回答 1

1

数组不具有多态性,您可以使用指针向量将其归档并将对向量的引用传递给函数。就像是:

#include <memory>
#include <vector>

void shift_shapes(std::vector<std::unique_ptr<Shape> >& shapes, int num_shapes, int x_offset, int y_offset)
{
    for (int i = 0; i < num_shapes; i++)
    {
        shapes[i].move(x_offset, y_offset);
    }
}
于 2013-06-16T21:48:23.573 回答