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 :

A propos des Templates


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de TNT89
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Par défaut A propos des Templates
    (Re)Bonjour,

    J'ai des petits soucis concernant les templates... de templates . Pour faire simple, j'ai une classe Vector< TYPE_UTILISE, NB_DIMENSION > que je dois passer en template de classe dans une autre structure AutreStruct< class C, [...]>. Je voudrais reconnaitre alors la structure Vector de deux manières : quelque soient TYPE_UTILISE et NB_DIMENSION et, ensuite, quelque soit NB_DIMENSION en sachant que tout cela se passe au niveau d'une fonction...

    Pour éclaircir :
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    template<typename TYPE, int DIMENSION>
    struct Vector
    {
         typedef TYPE* iterator;
         //blabla...
    };
     
    template< class C1, class C2>
    struct AutreStruct
    {
         //blabla
    };
     
    //Le problème est ici :
          //La fonction de base
    template< class T, class U>
    AutreStruct< T, U> MaFonction( const T &t, const U &u)
    {
          //blabla
    }
     
          //La spécialisation qui ne fonctionne pas
          //C'est le premier cas qui m'intéresse ici, puisque la fonction ne doit juste
          //reconnaitre que le type Vector et peu importe le nombre de dimensions
          //ou le type utilisé
    template<class U>
    template<typename TYPE, int DIMENSION>
    AutreStruct< Vector<TYPE, DIMENSION>::iterator , U> MaFonction( const T &t, const U &u)
    {
          //blabla
    }
    Erreur retournée par GCC :
    error: type/value mismatch at argument 1 in template parameter list for `[...]'
    Merci de votre aide.

  2. #2
    screetch
    Invité(e)
    Par défaut
    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
    //Le problème est ici :
          //La fonction de base
    template< class T, class U>
    AutreStruct< T, U> MaFonction( const T &t, const U &u)
    {
          //blabla
    }
     
          //La spécialisation qui ne fonctionne pas
          //C'est le premier cas qui m'intéresse ici, puisque la fonction ne doit juste
          //reconnaitre que le type Vector et peu importe le nombre de dimensions
          //ou le type utilisé
    template<class U, typename TYPE, int DIMENSION>
    AutreStruct< Vector<TYPE, DIMENSION>::iterator , U> MaFonction< Vector<TYPE, DIMENSION>::iterator , U>( const Vector<TYPE, DIMENSION>::iterator &t, const U &u)
    {
          //blabla
    }
    la syntaxe est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    template<typename t1, typename t2>
    void fonction();
     
    template< typename t, int dimension, ..... >
    void fonction< t1, t2 > ();
    /* remplacer t1,t2 par le type auquel correspond la specialisation
    soit dans ton exemple */
    template< typename t, int dimension, typename u >
    void fonction< Vector<t,dimension>,u > ();
    ensuite dans ta specialisation, T et U ne sont pas connus, il faut recopier le type specialisé (vector....::iterator)

  3. #3
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Vector<TYPE, DIMENSION>::iterator -> typename Vector<TYPE, DIMENSION>::iterator ?

  4. #4
    Membre averti
    Inscrit en
    Février 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations forums :
    Inscription : Février 2008
    Messages : 54
    Par défaut
    Corriger moi si je me trompe ! Les templates c en c++ ?
    c'est pas dotnet ou quelque chose comme ca ?

  5. #5
    screetch
    Invité(e)
    Par défaut
    c'est quoi les template C ?

  6. #6
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Il a voulu dire
    les templates c'est en C++ ?
    A l'origine c'est du C++.
    Il y a quand même quelque chose de similaire en C# et en Java (les Generics).

    Mais tout ce qui est abordé ici, ce sont les templates du C++.

  7. #7
    Membre éclairé Avatar de TNT89
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Par défaut
    Citation Envoyé par Matthieu Brucher Voir le message
    Vector<TYPE, DIMENSION>::iterator -> typename Vector<TYPE, DIMENSION>::iterator ?
    Oui ça fonctionne . Mais, corrigez moi si je me trompe, ça revient à faire du template typedef ???

    On doit donner aussi tous les paramètres de template dans la version générale? Si oui, imaginons que je veuille utiliser cette surcharge pour fonctionner avec des matrices, ça va me donner des listes à rallonge non? C'est plutôt bien supporté?

  8. #8
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Non, ça indique seulement que le ::iterator est un type, et non une valeur.

  9. #9
    Membre éclairé Avatar de TNT89
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Par défaut
    Y aurait-il une possibilité de faire des listes de paramètres template pour améliorer la lisibilité du code? Ou des structures qui s'y rapprochent?

Discussions similaires

  1. Réponses: 9
    Dernier message: 23/07/2014, 13h11
  2. A propos des templates blogs !
    Par pierre24 dans le forum Outils
    Réponses: 1
    Dernier message: 23/09/2008, 15h54
  3. Une question à propos des thread
    Par tscoops dans le forum C++Builder
    Réponses: 4
    Dernier message: 07/11/2003, 14h03
  4. A propos des 'File management Functions' de Windows
    Par znaidi dans le forum Windows
    Réponses: 3
    Dernier message: 01/04/2003, 16h01
  5. A propos des modèles d'objet (avec sources)
    Par DevX dans le forum C++Builder
    Réponses: 14
    Dernier message: 01/12/2002, 12h22

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