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

C++ Discussion :

typedef appelé de façon statique


Sujet :

C++

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 11
    Par défaut typedef appelé de façon statique
    Bonjour,

    Contexte:
    - 5 classes sont en jeux, soit IPrimitive, Rectangle, Triangle, Texte et Coordinates2f
    - Rectangle, Triangle et Texte héritent de IPrimitive et doivent redéfinir la méthode get2DCoordinates2f() qui retourne un vecteur (vector<Coordinates2f*>).

    Problème:
    Je dois répéter à toutes les fois vector<Coordinates2f*>, soit pour la création du vecteur comme tel ou pour la création de mon itérateur.

    Ma solution:
    J'ai créé une classe Constants qui possède des constructeurs/destructeurs privés et je fais une redéfinition de type (typedef). Voici la classe Constants:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    #ifndef CONSTANTS_H_
    #define CONSTANTS_H_
    #include <vector>
     
    using namespace std;
     
    class Constants{
    	public:
    		typedef vector<Coordinates2f*> type_listCoord;
     
    	private:
    		Constants();
    		virtual ~Constants();
     
    };
     
    #endif /*CONSTANTS_H_*/
    Donc pour me créer une liste qui contient des pointeurs de Coordinates2f. Je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Constants::type_listCoord *maListe = new Constants::type_listCoord;
    Et ça fonctionne!

    Le tout pour en arrivé à: "Est-ce une bonne façon de faire?"

    En passant, je suis Intermédiaire/avancé en Java, et Débutant/avancé en C++. Certaines fois, des choses sont faites en Java, mais ne peuvent être faites en C++.

    Merci à l'avance

  2. #2
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Je ne vois pas pourquoi se donner autant de peine pour un typedef.
    Pourquoi l'encapsuler dans une classe?
    Cette classe sera elle complété?
    J'ai pas du tout comprendre.

  3. #3
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    +1

    Si tu ne souhaite qu'un "sucre syntaxique" (facilité d'écriture)

    il te suffit d'un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef vector<Coordinates2f*> type_listCoord;
    sinon excuse moi, mais je trouve que vector<Coordinates2f*> est 100 fois plus clair pas beaucoup plus pénible à écrire que Constants::type_listCoord ...

    de plus, rarement besoin d'utiliser new...
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 11
    Par défaut
    Merci à seriousme et Swoög pour leur réponse rapide.

    Dans mon cas, je suis daccord que l'utilité de faire ce genre de manoeuvre n'est pas si bénéfique. Mais imaginez vous, par exemple, que vous avez une 30aine de classes qui s'échange des vecteurs, contenant tous le même type d'objet. Pour le moment, les vecteurs contiennent des pointeurs vers des objets, mais disons que demain, vous voulez qu'ils contiennent la référence. Dans ce cas, il faut aller changer dans toutes les classes la définition des vecteurs.

    Est-ce plus claire?

    Merci

  5. #5
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Pourquoi l'encapsuler?

  6. #6
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    Citation Envoyé par matrox
    Pour le moment, les vecteurs contiennent des pointeurs vers des objets, mais disons que demain, vous voulez qu'ils contiennent la référence.
    Les types stockés par les conteneurs de la STL doivent être copiables, les références ne le sont pas, elles sont impossibles à utiliser dans ce cas là... (dommage )

    sinon, pour ton exemple, si tu changes le type stcoké, il te faudra de toute façons remanier tout ton code... donc c'est du pareil au même...

    Et puis si c'est juste pour changer le type en lui même (que les autres comportement ne sont pas modifier) un petit replace all in project, et hop, plus de problèmes...

    et si t'aime pas cette solution, il reste la remarque de seriousme : POURQUOI l'encapsuler ? c'est jamais qu'un type comme un autre, un petit typedef à la fin du .h de Coordinates2f et basta...
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 11
    Par défaut
    Ok, j'avoue que ça l'a du sens. Merci bien.

    Mais, juste avant de clore cette discussion, j'aimerais bien savoir de quelle façon l'on peut rendre une variable global. Par exemple, je veux que PI = 3.1416 dans l'ensemble de mon projet, mais je veux la définir à un seul endroit. Comment faire?

    Merci

  8. #8
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    tu as deux choix... l'encapsulation dans une classe ou un namespace si ça se justifie (exemple, un namespace ou une classe Maths qui contiendrait pi, e, les facteurs de conversion radian/degré, certaines racines irrationnelles, etc...)

    ou alors en variables pûrement globale (très déconseillée... souvent la sémantique de ce type de variable témoigne d'une mauvaise modélisation en C++)

    J'ajouterais que l'encapsulation dans une classe est toujours préférable (même sémantiquement parlant) à celle dans un namespace

    dans le cas d'encapsulation dans une classe, ça se déclare très simplement : dans la signature de la classe : puis dans le cpp de la classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    TYPE CLASS::VAR( VALEUR );
    //ou
    TYPE CLASS::VAR = VALEUR;
    //les deux syntaxes étant équivalentes
    dans le cas d'encapsulation dans un namespace ou d'une variable globale :
    déclarer la variable dans un .h : puis la définir dans un .cpp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TYPE VAR(VALEUR);
    TYPE VAR = VALEUR;
    ensuite, ça se gère comme un couple .h/.cpp classique, le .h étant à inclure à chaque fois que tu as besoin de la variable
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 11
    Par défaut
    Ok, merci pour tous Swoög.

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

Discussions similaires

  1. Choix d'une classe pour appel de méthodes statiques
    Par Antwan76ers dans le forum Débuter avec Java
    Réponses: 11
    Dernier message: 05/07/2012, 10h55
  2. Appel méthode non statique C#
    Par francis.c dans le forum ASP.NET
    Réponses: 6
    Dernier message: 19/05/2011, 19h13
  3. Qt - Problème d'appel de méthode statique
    Par Sylra dans le forum C++
    Réponses: 2
    Dernier message: 14/02/2011, 18h38
  4. ClassLoader de façon statique
    Par JamesP dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 18/06/2007, 17h47
  5. Réponses: 3
    Dernier message: 24/12/2006, 23h41

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