Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: utilisation de C++11 pour la classe Group sur le wiki  (Lu 4091 fois)

0 Membres et 1 Invité sur ce sujet

germinolegrand

  • Newbie
  • *
  • Messages: 20
    • Voir le profil
utilisation de C++11 pour la classe Group sur le wiki
« 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);
    }
}
 
« Modifié: Mai 17, 2012, 03:36:15 pm par Laurent »

Orwel

  • Full Member
  • ***
  • Messages: 208
    • Voir le profil
Re : utilisation de C++11 pour la classe Group sur le wiki
« Réponse #1 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

germinolegrand

  • Newbie
  • *
  • Messages: 20
    • Voir le profil
Re : utilisation de C++11 pour la classe Group sur le wiki
« Réponse #2 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é.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : utilisation de C++11 pour la classe Group sur le wiki
« Réponse #3 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.
Laurent Gomila - SFML developer

L01man

  • Jr. Member
  • **
  • Messages: 69
    • Voir le profil
Re : utilisation de C++11 pour la classe Group sur le wiki
« Réponse #4 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://metroidprime4.xooit.fr/

Un même visage, un même passé, deux destins différents ?
Metroid Prime : Némésis, fangame de la suite du célèbre Metroid Prime 3 : Corruption.