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 :

fonction template pour container


Sujet :

Langage C++

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 42
    Points : 30
    Points
    30
    Par défaut fonction template pour container
    Bonjour,

    Je souhaiterais écrire une fonction template qui concerne les containers de type "vecteur".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    template <T>
    template <typename U>
    U* toPoint(const T<U>& v, int b, int e){
      U* p = new U[e-b+1];
      for(int i=0;i<e-b+1;i++){
        p[i] = v[b+i];
      }
      return p;
    }
    Le compilateur me dit que le 'T' has not been declared.
    Comment dois-je procéder pour écrire des fonctions template pour des containers ?

  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 : 39
    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
    Ca marchera mieux comme ça :
    Ceci dit tu n'as pas besoin de passer U en paramètre template, le type des éléments peut être récupéré avec T::value_type.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 42
    Points : 30
    Points
    30
    Par défaut le code suivant ne fonctionne pas non plus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    template <typename T>
    template <typename U>
    U* toPointer(const T<U>& v, int b, int e){
      U* p = new U[e-b+1];
      for(int i=0;i<e-b+1;i++){
        p[i] = v[b+i];
      }
      return p;
    }
    J'ai des erreurs
    'T' is not a Template
    too many template parameter lists in declaration of `U* toPointer(const T&, int, int)'

  4. #4
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    En effet, T n'est pas un template mais un type d'après ta déclaration.
    Ça doit être quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    template< template<typename U> typename T >
    U* toPointer(const T<U>& v, int b, int e){
      U* p = new U[e-b+1];
      for(int i=0;i<e-b+1;i++){
        p[i] = v[b+i];
      }
      return p;
    }
    Boost ftw

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 42
    Points : 30
    Points
    30
    Par défaut ça ne fonctionne pas non plus
    J'ai des erreurs:
    expected `class' before "T"
    expected constructor, destructor, or type conversion before '*' token


    Et si j'écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    template< template<typename U> class T >
    à la place j'ai:
    expected constructor, destructor, or type conversion before '*' token

  6. #6
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Peut-être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    template<typename U, template<U> class T>
    ....
    Boost ftw

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 42
    Points : 30
    Points
    30
    Par défaut toujours pas
    Avec ça j'ai

    type/value mismatch at argument 1 in template parameter list for `template<U <anonymous> > class T'
    error: expected a constant of type `U', got `U'

  8. #8
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Bon alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    template<template<typename> class T, typename U>
    U* toPointer(const T<U>& v, int b, int e){
      U* p = new U[e-b+1];
      for(int i=0;i<e-b+1;i++){
        p[i] = v[b+i];
      }
      return p;
    }
    Boost ftw

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 42
    Points : 30
    Points
    30
    Par défaut Un grand merci loufoque
    ça compile et ça marche très bien.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 15/05/2013, 11h00
  2. Fonction template pour copie polymorphe
    Par sone47 dans le forum C++
    Réponses: 8
    Dernier message: 29/01/2013, 09h40
  3. Réponses: 3
    Dernier message: 13/10/2012, 15h02
  4. Réponses: 1
    Dernier message: 29/07/2012, 20h30
  5. Réponses: 4
    Dernier message: 09/09/2010, 18h14

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