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 :

[Template] methode template d'une classe pas template


Sujet :

Langage C++

  1. #1
    Membre averti
    Avatar de bigquick
    Profil pro
    Inscrit en
    Août 2002
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 356
    Points : 353
    Points
    353
    Par défaut [Template] methode template d'une classe pas template
    Salut,

    Voilà, je travaille sous Visual C++ 6 (qui n'est pas très fort en template ), et du coup je voudrais savoir si c'est mon code qui n'est pas bon, ou lui

    J'ai une fonction pour instancier un dérivé de Composant, qui compile très bien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     template <typename T>
    Composant* ManagerComposant::instancier(std::string _strFichier)
    {
    	// static_cast le template en composant : erreur de compilation si le cast n'est pas possible
    	Composant* pComposant = static_cast<Composant*>(new T);
     
    	// .... beaucoup d'autre code ....
    }
    mais à l'utilisation ça se passe moins bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return instancier<Vecteur>(_strFichier);
    J'obtiens l'erreur : error C2275: 'Vecteur' : illegal use of this type as an expression

    Est-ce que ça vous à l'air correct ?
    merci!

    (ps: j'utilise une fonction parcequ'elle instancie le composant et fait plein de traitements dessus, qui sont indépendants du type réél du composant)

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Ton code est correct, c'est bien VC6 qui a du mal avec les fonctions membres templates. J'avais eu exactement le même problème.

  3. #3
    Membre averti
    Avatar de bigquick
    Profil pro
    Inscrit en
    Août 2002
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 356
    Points : 353
    Points
    353
    Par défaut
    Ah ok, merci
    Du coup je vais devoir trouver une autre solution alors si j'ai bien compris...

    A moins que aies trouvé un contournement sympa quand tu avais le même problème ?

  4. #4
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 281
    Points : 11 029
    Points
    11 029
    Par défaut
    Pour un truc pareil, il n'y a guère de risque à définir les créateurs comme des fonctions libres. Et ensuite passer le composant fraichement créé à la fonction membre de ton gestionnaire.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 82
    Points : 71
    Points
    71
    Par défaut
    N'importe quel compilateur gratuit fait mieux que VC6 aujourd'hui. Peut être qu'il faut penser à changer de compilo plutot que de manière de coder...

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 82
    Points : 71
    Points
    71
    Par défaut Re: [Template] methode template d'une classe pas template
    Citation Envoyé par bigquick
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     template <typename T>
    Composant* ManagerComposant::instancier(std::string _strFichier)
    {
    	// static_cast le template en composant : erreur de compilation si le cast n'est pas possible
    	Composant* pComposant = static_cast<Composant*>(new T);
     
    	// .... beaucoup d'autre code ....
    }
    Et bien, j'ai du mal à voir ce à quoi le static cast sert. Soit le paramètre modèle à pour base Composant et ca compile sans cast. Soit ce n'est pas le cas, et ca ne compilera jamais. Le static cast n'aide en rien.

    Pour adapter le traitement dans ManagerComposant, tu peux utiliser BOOST::type_traits -> ::boost::is_base_and_derived<T,U>::value

  7. #7
    Membre averti
    Avatar de bigquick
    Profil pro
    Inscrit en
    Août 2002
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 356
    Points : 353
    Points
    353
    Par défaut
    Tu sais, en entreprise chacun ne compile pas sur la plateforme / compilateur de son choix... sinon ca deviendrait vite la foire à la saucisse
    Je voulais pas VC6, on m'a forcé

    Pour ce qui est du static_cast, en fait je n'ai jamais vraiment compris à quoi il sert... je le mets histoire d'explicier le cast, mais quand est-ce que c'est vraiment utile ?

    Et merci Luc, c'est ce que j'ai fait du coup, ça fonctionne beaucoup mieux maintenant

  8. #8
    Membre éprouvé Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Points : 933
    Points
    933
    Par défaut
    Citation Envoyé par bigquick
    Pour ce qui est du static_cast, en fait je n'ai jamais vraiment compris à quoi il sert... je le mets histoire d'explicier le cast, mais quand est-ce que c'est vraiment utile ?
    Ca sert surtout à expliciter
    A mon avis, il est surtout utile dans la mesure où il facilite la maintenance, ce qui est une raison largement suffisante. En outre, le recours systématique aux opérateurs de transtypage permet de lutter contre un code du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    class A{}; 
    class B{};
    A* pa = (A*) new B;
    qui, lui, est susceptible de compiler...

  9. #9
    Membre averti
    Avatar de bigquick
    Profil pro
    Inscrit en
    Août 2002
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 356
    Points : 353
    Points
    353
    Par défaut
    OK c'est noté
    Je vais continuer à l'utiliser alors ....

    Merci à tous

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 02/12/2010, 11h36
  2. Réponses: 6
    Dernier message: 21/07/2009, 13h53
  3. Template et propriétés d'une classe
    Par selimR dans le forum Eclipse Java
    Réponses: 0
    Dernier message: 27/05/2009, 16h35
  4. Réponses: 4
    Dernier message: 25/10/2007, 17h18
  5. template et utilisation avec une classe existante
    Par vartav dans le forum Langage
    Réponses: 6
    Dernier message: 14/03/2007, 10h39

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