在一个类中存储SDL_Surface项的数组?

时间:2013-10-05 22:04:17

标签: c++ arrays sdl dynamic-arrays

我想将所有SDL_Surface变量存储在一个数组中,并将该数组保存在一个类中。原因是我希望能够根据事件重新加载所有SDL_Surfaces。

我认为它应该是这样的,但我可能错了:

class Imgs_Arr{
    private:
        int pos;
    public:
        // DECLARE THE ARRAY 
        Imgs_Arr();
        void addItem(char * path);
        void changeItem(int pos);
};

Imgs_Arr::Imgs_Arr(){
    // CREATE ARRAY 
}

void Imgs_Arr::addItem(char * path){ // ADD ITEM IN LAST ARRAY POSITION
    vec[pos] = load_image(path);
    if( vec[pos] == NULL ) exit(5);
    pos++;
}

void Imgs_Arr::changeItem(int p){ // ADD ITEM IN LAST ARRAY POSITION
    vec[p] = load_image(path);
    if( vec[p] == NULL ) exit(5);
}

我正在寻找一个如何做到这一点的例子。但任何信息都会有用。感谢

1 个答案:

答案 0 :(得分:0)

您的问题有点具体,因为SDL_Surface*是一个不透明的句柄。您必须永远不知道它指向的实际SDL_Surface 对象。因此,您需要一个动态的不透明手柄数组。对于主数组,我们只使用std::vector,所以我会这样做:

#include <memory>
#include <vector>
#include <SDL.h>

class Arr_Images
{
    using sdl_handle = std::unique_ptr<SDL_Surface, void(*)(SDL_Surface*)>;

    sdl_handle wrap_unique_surface(SDL_Surface * s)
    {
        return sdl_handle(s, SDL_FreeSurface);
    }

    std::vector<sdl_handle> surfaces;

public:
    void addImg(char const * path)
    {
        if (SDL_Surface * p = load_image(path))
        {
            surfaces.push_back(wrap_unique_surface(p));
        } 
        else
        {
            // failed to load
        }
    }
};