IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage C++ Discussion :

Classe qui s'appelle elle-même dans sa définition ?


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Doctorant en Astrophysique
    Inscrit en
    Mars 2009
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Astrophysique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2009
    Messages : 312
    Par défaut Classe qui s'appelle elle-même dans sa définition ?
    Bonjour à tous.

    Je suis en train de coder un ensemble de classes pour faire une arborescence (BGL ne me permettant pas bien de faire ce que je souhaite faire). Et ce qui serait plus simple pour moi c'est que chaque objet est un pointeur vers son père et un pointeur vers un tableau de fils dans la structure en arborescence.

    Bref, j'aurai besoin d'un truc de ce type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class MaClasse
    {
        private:
            MaClasse* pere;
            MaClasse* fils[8];
    };
    Question : est-ce que ce genre de chose fonctionne bien et même dans le cas où cela fonctionne est-ce que c'est considéré comme "propre" ?

    Merci

  2. #2
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    pour l´utilisation du nom de la classe, pas de problème (class MaClass est une définition de MaClass donc elle peut être utilisée ensuite)
    Par contre, c´est un choix d´utiliser des pointeurs nus et de pas utiliser un vector ?

  3. #3
    Membre éclairé
    Homme Profil pro
    Doctorant en Astrophysique
    Inscrit en
    Mars 2009
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Astrophysique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2009
    Messages : 312
    Par défaut
    Pour la question sur les vector : pure raison de perfs. J'ai noté des différences de perfs entre les vector et les tableaux C (j'ai posté une question là dessus récemment), et comme c'est un code destiné à tourner sur supercalculateurs, je veux éviter de perdre du temps avec des vectors alors que des tableaux C sont aussi simples à utiliser dans ce cas précis (il y aura surement des vectors dans d'autre parties de mon code mais pas là). (pour préciser l'arborescence comptera en général plus de 100 milliards d'éléments donc il faut que le truc soit plutôt bien conçu).

  4. #4
    Membre Expert
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Par défaut
    turlututu, std::vector est tout a fait utilsiable dans un contexte HPC, du moment ou on l'utilise avec un allocateur correct et qu'on compile en -NDEBUG. Utilsier des pointeurs nus c'ets chercher le bugs car on a eu la flemme d'ecrire un operateru d'affectation.

  5. #5
    Membre éclairé
    Homme Profil pro
    Doctorant en Astrophysique
    Inscrit en
    Mars 2009
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Astrophysique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2009
    Messages : 312
    Par défaut
    Re.

    Comme vous avez beaucoup plus d'expérience que moi sur ces questions, quelle serait la bonne méthode à employer ? (pour les pointeurs j'ai des habitudes venant du C).

    Sachant que ma problématique est la suivante :
    - je veux du code sûr
    - je travaillerai environ avec 5 millions de MaClasse par CPU et la taille prise par chaque objet en mémoire est critique
    - j'ai prévu pour chaque objet MaClasse 7 datamembers : 1 entier 64 bit + 2 entiers 8 bit + 3 pointeurs vers MaClasse (racine, pere, fils) + 1 pointeur vers AutreClasse
    - Le pointeur vers racine : soit est NULL, soit pointe vers 1 racine
    - Le pointeur vers pere pointe : soit est NULL, soit pointe vers 1 pere
    - Le pointeur vers fils : soit est NULL, soit pointe vers un tableau de 8 fils

    Quel est le meilleur moyen de faire cela de façon sûre sans augmenter la place que j'ai prévu en mémoire ?

    Merci beaucoup

    EDIT : + je peux utiliser les nouveautés de C++2011

  6. #6
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Citation Envoyé par Joel F Voir le message
    turlututu, std::vector est tout a fait utilsiable dans un contexte HPC, du moment ou on l'utilise avec un allocateur correct et qu'on compile en -NDEBUG. Utilsier des pointeurs nus c'ets chercher le bugs car on a eu la flemme d'ecrire un operateru d'affectation.
    Comme en l’occurrence, le nombre de fils a l'air fixe, un std::array doit probablement être plus efficace qu'un std::vector, non ?

    A moins que cette valeur de 8 soit un maximum, que pour la quasi totalité des nœuds il n'y ait que 2 fils, et qu'on gagne plein de mémoire en utilisant un vector ?
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  7. #7
    Membre éclairé
    Homme Profil pro
    Doctorant en Astrophysique
    Inscrit en
    Mars 2009
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Astrophysique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2009
    Messages : 312
    Par défaut
    En gros je commence un module de maillage adaptatif pour un futur code N-body (avec relativité générale). En N dimensions (3 en général), si on atteint 2^N particules (8 en général) dans une cellule alors on ajoute un niveau de raffinement et on génère 2^N fils. Donc en gros soit il n'y a pas de fils, soit il y en a 8....

    Et juste une question : dans mon std::array je mettrai quoi : des pointeurs ou directement les objets ?

  8. #8
    Membre Expert
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Par défaut
    Citation Envoyé par JolyLoic Voir le message
    Comme en l’occurrence, le nombre de fils a l'air fixe, un std::array doit probablement être plus efficace qu'un std::vector, non ?

    A moins que cette valeur de 8 soit un maximum, que pour la quasi totalité des nœuds il n'y ait que 2 fils, et qu'on gagne plein de mémoire en utilisant un vector ?
    Evidemment. Je rebondissais juste sur ce bon vieux FUD du vector super-lent

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Citation Envoyé par Joel F Voir le message
    turlututu, std::vector est tout a fait utilsiable dans un contexte HPC, du moment ou on l'utilise avec un allocateur correct et qu'on compile en -NDEBUG. Utilsier des pointeurs nus c'ets chercher le bugs car on a eu la flemme d'ecrire un operateru d'affectation.
    D'ailleurs, si quelqu'un connaît un site qui aborde ces problématique de performances liées au stockage, je suis preneur.

Discussions similaires

  1. Réponses: 11
    Dernier message: 25/07/2012, 18h56
  2. [AC-2002] Chaine qui ne s'équivaut pas à elle-même dans liste déroulante
    Par Nightwing367 dans le forum IHM
    Réponses: 7
    Dernier message: 19/04/2011, 19h14
  3. Réponses: 5
    Dernier message: 28/05/2008, 16h18
  4. class qui en appel une autre qui peux planter !
    Par deadliff dans le forum Langage
    Réponses: 7
    Dernier message: 20/03/2007, 15h40
  5. Une iframe qui se supprime elle-même
    Par jibouze dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 19/12/2005, 10h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo