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 :

Conception : template et include


Sujet :

Langage C++

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 199
    Points : 106
    Points
    106
    Par défaut Conception : template et include
    Bonjour,

    Le problème est le suivant: soit les classes A, B (template) et C, définis chacune dans leur header respectif, tel que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    class A : public B<C>
    {
    };
    Cela m'oblige donc dans a.hpp d'inclure c.hpp.

    Or ce dernier inclus lui même GL/glx.h, que je ne voudrais pas avoir incé dans la classe C, et donc pas de forward declaration possible..
    lus partout par la suite... En effet il inclus GL/gl.h et cela pose problème (je développe avec gl3.h, et donc gl.h ne doit pas entrer en conflit).

    Malheureusement je suis obligé d'inclure GL/glx.h car il possède le type GLXContext utilisé dans la classe C, et donc pas de forward declaration possible..

    Donc je commence à me demander si je suis pas dans un problème insoluble..

    Si quelqu'un connaît une solution pour ce problème je lui en serait très reconnaissant!
    Merci d'avance!

  2. #2
    En attente de confirmation mail

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Points : 3 311
    Points
    3 311
    Par défaut
    L'utilisation d'une classe en paramètre template n'oblige pas d'avoir la définition complète de la classe, ça dépends ce qu'en fait le template (B dans ton cas).

    Ensuite, tu ne crois pas qu'utiliser des éléments développés pour gl (comme ça a l'air d'être le cas de la classe C) alors que tu utilises gl3 et qu'il y a (d'après ce que tu dis) une rupture de compatibilité, c'est courir à la catastrophe ?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 199
    Points : 106
    Points
    106
    Par défaut
    Tout d'abord merci pour la réponse!

    Citation Envoyé par Flob90 Voir le message
    L'utilisation d'une classe en paramètre template n'oblige pas d'avoir la définition complète de la classe, ça dépends ce qu'en fait le template (B dans ton cas).
    La classe B possède un std::shared_ptr sur la classe C, donc est-ce qu'une déclaration est suffisante? Mais ou la placer et quand inclure la définition du coup?

    Citation Envoyé par Flob90 Voir le message
    Ensuite, tu ne crois pas qu'utiliser des éléments développés pour gl (comme ça a l'air d'être le cas de la classe C) alors que tu utilises gl3 et qu'il y a (d'après ce que tu dis) une rupture de compatibilité, c'est courir à la catastrophe ?
    C'est un peu compliqué, api graphique oblige je suis obligé d'ouvrir un contexte pour opengl, peut importe la version. Or cela dépend de la plate-forme. Sous Linux par exemple, cela passe par la surcouche GLX au serveur X. Et cela inclus forcement gl.h qui est incompatible avec gl3.h.

    Après ,le header gl3.h, supprime juste les prototypes des fonctions dépréciées et en ajoute de nouvelle.

    Le but est surtout que l'inclusion de gl.h ne se propage nulle part, sauf où c'est obligatoire.

  4. #4
    En attente de confirmation mail

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Points : 3 311
    Points
    3 311
    Par défaut
    Alors non, la définition de B (et donc de A) n'a pas besoin de la définition de C. Par contre les définitions des fonctions membres vont en avoir besoin. Pour faire ca il faut que tu fasses un fichiers qui fait que la définition de la classe, et un autre qui va définir les fonctions membres.

    Ensuite dans le fichier le header où A est défini tu vas seulement inclure le premier fichier et utiliser une déclaration anticipé de C, et dans le fichier d'implémentation de A tu vas inclure le header où C est défini et le second fichier. Ainsi l'inclusion de gl.h sera confiné dans cette unité de compilation.

    Quelque chose dans ce goût là (pour illustrer l'idée des deux fichiers) : http://herbsutter.com/gotw/_101/

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 199
    Points : 106
    Points
    106
    Par défaut
    Merci beaucoup! Je viens de mettre tout cela en place et ça m'enlève une énorme épine du pied!

    Cette technique mériterait d'être plus connu! Encore merci!

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

Discussions similaires

  1. [POO] Conception d'un système de template
    Par iwf-fr dans le forum Langage
    Réponses: 8
    Dernier message: 06/02/2007, 13h29
  2. [Système] template + include
    Par Yoshio dans le forum Langage
    Réponses: 15
    Dernier message: 16/11/2006, 17h42
  3. [POO] template ou include ?
    Par rougedragon dans le forum Langage
    Réponses: 1
    Dernier message: 15/10/2006, 15h05
  4. Réponses: 11
    Dernier message: 03/05/2006, 15h12

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