Forum de la communauté SFML

Général => Suggestions de nouvelles fonctionnalités => Discussion démarrée par: germinolegrand le Mai 17, 2012, 12:12:36 pm

Titre: utilisation de C++11 pour la classe Group sur le wiki
Posté par: germinolegrand le Mai 17, 2012, 12:12:36 pm
Bonjour, je lis sur le wiki https://github.com/SFML/SFML/wiki/TutorialDrawableGroup une suggestion fort intéressante de classe Group, et sa raison principale de ne pas figurer dans la SFML :
The SFML doesn't implement a Group class for ownership reasons: should the Group destroy its elements when it is destroyed?
L'utilisation de std::shared_ptr (c++11) dans cette page wiki, ou du moins sa suggestion, pourrait être fort utile pour régler cette question...

#include <SFML/Graphics.hpp>
#include <memory>

class Group : public sf::Drawable, public std::vector<std::shared_ptr<sf::Drawable>> {
    public:
        Group();
        ~Group();

        void render(sf::RenderTarget&) const;
};

#include "group.hpp"

Group::Group() :
    sf::Drawable(),
    std::vector<std::shared_ptr<sf::Drawable>>() {
}
Group::~Group() {
//nada rien, ça marche tout seul.
}

//This is what ables you to do Group.Draw() to draw all the Drawable inside of a Group, and to apply common settings such as position, color, ... to its elements.
void Group::render(sf::RenderTarget& Tar) const {
    for(std::vector<std::shared_ptr<sf::Drawable>>::iterator i = begin(); i != end(); ++i) {
        Tar.draw(*i);
    }
}
 
Titre: Re : utilisation de C++11 pour la classe Group sur le wiki
Posté par: Orwel le Mai 17, 2012, 01:22:28 pm
Comment est réglé le problème de l'overship???

La bonne solution(selon mon expertise) serait un attribut booléen ou 2 classe pour savoir si à l'élimination d'un élément on détruit le drawable ou pas  ;D
Titre: Re : utilisation de C++11 pour la classe Group sur le wiki
Posté par: germinolegrand le Mai 17, 2012, 01:30:10 pm
Eh bien, quand on ajoute un Drawable à ce groupe, soit on garde le drawable ailleurs avec un shared_ptr => l'objet ne sera pas détruit à la destruction du groupe, soit on ne garde rien, à ce moment là le drawable est détruit (et tant mieux pour la mémoire d'ailleurs). Ça permet par ailleurs de faire de la destruction sélective à volonté.
Titre: Re : utilisation de C++11 pour la classe Group sur le wiki
Posté par: Laurent le Mai 17, 2012, 03:40:37 pm
Comme je l'ai déjà dit pour cette classe, le problème n'est pas technique, c'est juste un choix conceptuel à faire. Là tu choisis la responsabilité partagée, c'est une option qui conviendra à certains mais pas à tous. D'autres stratégies nécessiteront d'autres implémentations.

C'est vain de vouloir chercher une implémentation universelle qui contentera tout le monde.
Titre: Re : utilisation de C++11 pour la classe Group sur le wiki
Posté par: L01man le Mai 17, 2012, 04:11:39 pm
Orwel, Germino, vous avez eu les mêmes suggestions qui ont été faites dans ce sujet (http://fr.sfml-dev.org/forums/index.php?topic=7719.0).