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 :

Problème de template


Sujet :

Langage C++

  1. #1
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut Problème de template
    Bonjour à tous.
    J'ai un propblème avec une DP : la factory.
    J'ai essaye de la cree sous forme d'une template(couplé avec un singleton ) mais il y a un passage qui coince.
    Voici le code :

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
     
    #include <map>
    #include <iostream>
    #include <iterator>
     
    using namespace std;
     
    class Figure
    {
    public:
      //  static bool val;
      //static  Figure* Create();
      virtual void SeDessiner(void)=0;
    };
     
    //bool Figure::val = false;
     
    class Cercle : public Figure {
    public:
      static bool val;
      virtual void SeDessiner(){cout<<"Je suis un cercle"<<endl;}
     
      static Figure* Create(){
        return new Cercle();
      }
    };
     
    class Carre : public Figure {
    public:
      static bool val;  
    virtual void SeDessiner(){cout<<"Je suis carre"<<endl;}
     
     static Figure* Create(){
       return new Carre();
     }
    };
     
    template<typename Key,typename Object> class Factory
    {
    private:
     
      typedef Object* (*Creator)();
     
      static Factory<Key,Object>* m_fact;
      map<Key, Creator> m_list;
     
      Factory(){}
      ~Factory(){}
     
    public:
      static Factory* GetInstance()  
      {
        if(m_fact==NULL)
          {
    	      m_fact = new Factory;
          }
        return m_fact;
      }
     
      static void Kill()
      {
        if(m_fact!=NULL)
          {
    	    delete m_fact;
          }
      }
     
     
      bool Register(Key key,Creator creator)
      {
        bool ret=true;
        if(m_list.find(key)!=m_list.end())
          {
    	      ret=false;
          }
        else
          {
    	      m_list[key]=creator;
          }
        return ret;
     
      }
     
        Object* create(Key key)
      {
        Object *obj=NULL;
        Creator crt;
        std::map<Key, Creator>::iterator it; //ca casse ici
     
        it=m_list.find(key);
     
        if(it!=m_list.end())
          {
    	      crt=(*it).second;
    	      obj=crt();
          }
        return obj;
      }
     
     
     
    };
     
     
    template<typename Key,typename Object> Factory<Key,Object>* Factory<Key,Object>::m_fact=NULL;
    bool Carre::val= Factory<string,Figure>::GetInstance()->Register("Carre",Carre::Create);
    bool Cercle::val=Factory<string,Figure>::GetInstance()->Register("Cercle",Cercle::Create);
     
    int main(void)
    {
     
      Figure *c=Factory<string,Figure>::GetInstance()->create("Cercle");
      Figure *ca=Factory<string,Figure>::GetInstance()->create("Carre");
     
      c->SeDessiner();
      ca->SeDessiner();
     
      delete c;
      delete ca;
     
      return 0;
    }
    L'erreur est qu'il attende un point-virgule avant it .
    Si quelqu'un sait pourquoi.

    Merci de m'aider.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  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 : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Ajoute typename devant la déclaration de ton itérateur. Plus d'infos dans la FAQ.

  3. #3
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    Merci beaucoup.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

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

Discussions similaires

  1. [POO] Problème de template
    Par T0xF0x dans le forum Langage
    Réponses: 4
    Dernier message: 05/07/2006, 13h36
  2. [xslt][Javascript] Problème de templates
    Par Dnallabar dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 03/11/2005, 11h55
  3. problème classes templates...
    Par youp_db dans le forum C++
    Réponses: 3
    Dernier message: 02/11/2005, 13h04
  4. Réponses: 3
    Dernier message: 22/03/2005, 09h13

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