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

Développement 2D, 3D et Jeux Discussion :

Question sur "Architecture d'un jeu vidéo 3D par Pierre Schwartz"


Sujet :

Développement 2D, 3D et Jeux

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2004
    Messages : 185
    Points : 118
    Points
    118
    Par défaut Question sur "Architecture d'un jeu vidéo 3D par Pierre Schwartz"
    Bonjour,
    avant de commencer je tiens à préciser que je n'ai pas l'habitude d'utiliser les classes conteneurs.
    je ne comprends pas cette partie de code dans engine_event.h:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    bool operator==(const engine_event& e){
    return (type == e.type) && 
    (s_data == e.s_data) && 
    (i_data == e.i_data) && 
    (v_data == e.v_data);
    }
    avant ça on définis des conteneurs associatif map :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int type;
    std::map<std::string, std::string> s_data;
    std::map<std::string, int> i_data;
    std::map<std::string, serializable_vector3df> v_data;
    operator est donc de type booléen type un entier
    mais je comprends pas ce que fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    operator==(const engine_event& e)
    fait-il une comparaison ? au moment de l'implémentation même ? au moment où on l'appelle ?

    et ça, ça fait quoi ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    return (type == e.type) && 
    (s_data == e.s_data) && 
    (i_data == e.i_data) && 
    (v_data == e.v_data);
    j'ai vraiement l'impression que l'implémentation as été fait dans le header même

  2. #2
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    1 655
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 655
    Points : 2 161
    Points
    2 161
    Par défaut
    Citation Envoyé par TocTocKiéLà? Voir le message
    avant ça on définis des conteneurs associatif map :
    Les deux parties sont indépendantes.

    fait-il une comparaison ? au moment de l'implémentation même ? au moment où on l'appelle ?
    operator== permet de surcharger l'opérateur '==' dans le code qui utilise la classe (ici 'engine_event', j'imagine).

    C'est une fonction comme une autre, on l'évalue à chaque fois qu'elle est appelée au cours de l'exécution du programme. La seule différence est que ça permet de redéfinir un opérateur qui fait partie du langage c++, l'opérateur '=='. Ca permet d'avoir du code plus clair et plus concis.

    Ainsi, on pourra utiliser dans notre code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (engineEvent1 == engineEvent2) [...]
    Ce code étant exactement équivalent à l'appel:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (engineEvent1.operator==(engineEvent2))
    De même, tu peux très bien renommer la fonction de 'operator==' en un nom 'classique', par exemple 'isMyObjectEqualTo' et t'en servir dans un test:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (engineEvent1.isMyObjectEqualTo(engineEvent2)) [...]
    ... ça fera exactement la même chose.

    et ça, ça fait quoi ?
    Ici la fonction semble simplement tester que les données membres de chaque instance (s_data, i_data et v_data) sont elle-même égales.
    On considère donc que deux instances de cette classe sont égales quand leurs trois données membres ci-dessus sont égales.

    j'ai vraiement l'impression que l'implémentation as été fait dans le header même
    oui. C'est juste pour suggérer au compilateur que cette fonction aurait intérêt à être 'inline'.



    Pour finir, et comme dans l'immense majorité des questions 'de base', tu aurais pu trouver les réponses toi-même: developpez.com propose plein de , dont celle-ci. Autant s'en servir

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2004
    Messages : 185
    Points : 118
    Points
    118
    Par défaut
    merci, la première partie de ton message est clair pour moi.
    Par contre, que veut dire suggérer ? ça veut dire que le compilateur peut décider ?

    enfin pour les FAQs, je les utilise beaucoup, quand je sais ce que je cherche, dans ce cas là, je ne savais pas qu'il s'agissait d'une surcharge d'opérateur, je me suis quand même tapé toute la lecture des classes conteneur de la STL http://cpp.developpez.com/cours/stl/#LIII avant de venir poster

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 124
    Points : 148
    Points
    148
    Par défaut
    Oui de nos jours on préfère laisser le compilateur choisir pour ce qui est inline, il est générallement meilleurs que nous pour décider si il faut le faire ou pas.

  5. #5
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    1 655
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 655
    Points : 2 161
    Points
    2 161
    Par défaut
    Citation Envoyé par TocTocKiéLà? Voir le message
    Par contre, que veut dire suggérer ? ça veut dire que le compilateur peut décider ?
    Effectivement, le compilateur est à priori le mieux placé pour savoir si une fonction a intérêt a être 'inlinée' ou pas. C'est donc lui qui décide au final ; le mot clef 'inline' ou la déclaration du corps de la fonction dans la définition de la classe (comme ton exemple) ne sont que des suggestions et le compilateur se réserve le droit de les suivre ... ou pas.

    C'est d'ailleurs valable pour nombre d'autres optimisations qui sont faites par le compilo sans demander l'avis du développeur (hors flags 'globaux' stipulés lors de l'exécution du compilo pour forcer explicitement l'optimisation ou la non-optimisation de certains types d'écritures, exemple).

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2004
    Messages : 185
    Points : 118
    Points
    118
    Par défaut
    merci de vos réponses , je mets le sujet en résolu.
    Pour ce qui est du lien concernant l'optimisation, je le garde de côté pour l'instant, car c'est quelque chose que j'aimerais également découvrir, mais pour l'instant je préfère continuer la lecture du code de Pierre Schwartz.

  7. #7
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10 369
    Points : 40 164
    Points
    40 164
    Par défaut
    Citation Envoyé par TocTocKiéLà? Voir le message
    et ça, ça fait quoi ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    return (type == e.type) && 
    (s_data == e.s_data) && 
    (i_data == e.i_data) && 
    (v_data == e.v_data);
    J'ai simplement défini l'opérateur == d'un engine_event comme étant le == entre tous les champs du engine_event

    Citation Envoyé par TocTocKiéLà? Voir le message
    j'ai vraiement l'impression que l'implémentation as été fait dans le header même
    En effet, la classe engine_event est l'une des rares qui n'a pas de fichier .cpp associé. Ce n'était même pas spécialement pour des questions d'inline. Juste par simplicité

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [POO] Questions sur mon architecture de boutique
    Par kro001 dans le forum Langage
    Réponses: 6
    Dernier message: 06/03/2009, 15h00
  2. [MOSS] question sur l'architecture du SI l'accueuillant
    Par lelutin dans le forum SharePoint
    Réponses: 5
    Dernier message: 10/11/2007, 17h47
  3. Question sur Architecture d'un jeu vidéo 3D
    Par Polygon dans le forum Développement 2D, 3D et Jeux
    Réponses: 2
    Dernier message: 28/10/2007, 12h43
  4. Débutant RCP - Question sur l'architecture
    Par LoloBebop dans le forum Eclipse Platform
    Réponses: 11
    Dernier message: 07/06/2006, 11h35

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