L'aide personnalisée deleter avec std::shared_ptr

Je suis en train de travailler sur la façon d'utiliser std::shared_ptr avec une coutume deleter. Plus précisément, je l'utilise avec SDL_Surface comme:

std::shared_ptr<SDL_Surface>(SDL_LoadBMP(....),SDL_FreeSurface);

qui compile et fonctionne très bien. Cependant, je voudrais essayer mon propre deleter et ne peut pas travailler sur la façon de le faire. La documentation pour SDL_FreeSurface se trouve ici:

http://sdl.beuc.net/sdl.wiki/SDL_FreeSurface

dans lequel je trouve le SDL_FreeSurface est déclarée comme suit:

void SDL_FreeSurface(SDL_Surface* surface);

Comme un test, et en passant par cette information, j'ai essayé la fonction suivante:

void DeleteSurface(SDL_Surface* surface)
{
    std::cout << "Deleting surface\n";
    SDL_FreeSurface(surface);
}

Cependant, la compilation avec g++ me donne l'erreur suivante:

error: no matching function for call to 'std::shared_ptr<SDL_Surface>::shared_ptr(SDL_Surface*, <unresolved overloaded function type>)'

J'ai regardé la documentation gnu pour la gcc std::shared_ptr mise en œuvre, mais ne peut pas faire beaucoup de sens. Ce que je fais mal?

EDIT: depuis, j'ai rétréci le problème, mais laisse la question initiale. Ce que j'ai eu était une classe de Jeu qui, si je bande pour la mise en œuvre de base, était quelque chose comme:

class Game {
    public:
        /* various functions */
    private:
        void DeleteSurface(SDL_Surface* surface);
        bool CacheImages();
        std::vector<std::shared_ptr<SDL_Surface> > mCachedImages;

        /* various member variables and other functions */
}

avec la mise en œuvre de DeleteSurface comme ci-dessus, et la mise en œuvre de CacheImages() comme:

bool CacheImages()
{
    mCachedImages.push_back(std::shared_ptr<SDL_Surface>(SDL_LoadBMP(...),DeleteSurface);
    return true;
}

qui m'ont donné de l'erreur que j'ai énumérés ci-dessus. Cependant, si je déplace le DeleteSurface() fonction à l'extérieur de la Game classe autrement sans le modifier, le code compile. Qu'est-ce y compris la DeleteSurface fonction dans le Game classe qui est à l'origine des problèmes?

  • Votre exemple compile très bien pour moi.
InformationsquelleAutor Wheels2050 | 2012-09-09