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 :

surcharger -> pour un vector de pointeur.


Sujet :

Langage C++

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 11
    Points : 0
    Points
    0
    Par défaut surcharger -> pour un vector de pointeur.
    Bonjour,

    Alors je continue mon petit chemin d'apprentissage en C++ et je suis encore confronté à un problème de vector vers des pointeurs...
    J'aimerais pouvoir faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     vector <*truc> test;
    test->affiche();
    Mais pour cela il faut que je surcharge mon opérateur -> de sorte qu'il applique à chaque pointeur de mon vector test la méthode affiche() de la class Truc...

    Comment faire ???
    J'ai beau cherché, je ne trouve pas comment je peux faire pour surcharge -> vers une fonction...
    après je pensais à un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    template <typename S>
    void operator->(const vector<S> & hop, FONCTION fonc() ){
        for(size_t i=0;i<(hop.size());++i) (hop[i])->fonc();
        }
    Mais voilà, que dois-je mettre pour fonction ??

  2. #2
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 265
    Points : 6 686
    Points
    6 686
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    tout d'abord, ce n'est pas:
    mais
    Ensuite, tu te compliques trop la vie. vector est une classe de la bibliothèque standard, n'y touche pas.

    De plus, le c++ permet une approche objet, il serait dommage de s'en passer. Cela signifie qu'en fait, pour faire simple, chaque objet doit se débrouiller tout seul. Un objet doit donc s'afficher lui-même (en lui fournissant ce dont il a besoin pour le faire). C'est la raison pour laquelle, concrètement, habituellement on fait quelque chose dans le style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // un opérateur d'indirection de flux pour ton objet
    ostream & operator << ( ostream& ostr, const Truc & t )
    {
    	ostr << /* ce qu'il faut afficher ici */;
    	return ostr;
    }
     
    // et pour l'affichage (avec vt un vector<Truc>):
    copy( vt.begin(), vt.end(), ostream_iterator<Truc>(cout, " ")); // cette ligne utilise l'operator << implémenté ci-dessus
    Le code ci-dessus fonctionne pour un vector<Truc>. Toi tu as un vector<Truc*>, il faudra donc adapter le code. Ça devrait donner quelque chose dans le style:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // l'opérateur d'indirection de flux
    ostream & operator << ( ostream& ostr, const Truc * t )
    {
    	ostr << /* ce qu'il faut afficher ici */;
    	return ostr;
    }
     
    // l'affichage sur la console (avec vt un vector<Truc*>):
    copy( vt.begin(), vt.end(), ostream_iterator<const Truc*>(cout, " "));

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 11
    Points : 0
    Points
    0
    Par défaut
    Non, ce n'est pas ça du tout mon problème, j'ai évidemment surchargé cout << de manière à ce que mon affichage fonctionne bien... Je l'ai même fait de manière polymorphique comme indiqué dans la FAQ

    J'ai pris la méthode affiche() en exemple, en réalité j'aimerais que l'ensemble de mon vector de pointeur puisse accéder à une méthode quelconque de la classe des pointeurs en surchargeant une fois pour toute un opérateur binaire ^^'

    Mon problème c'est vraiment pour appeler une méthode qui se trouve dans tous les pointeurs de mon vector<Truc*> !!!

    J'ai une méthode nommée bouger() dans ma class voiture:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class Voiture : public Vehicule {
    public:
    ...
    void afficher();
    void bouger(double);
    ...
    protected:
    ...
    double[3] position;
    ...
    };
    Ensuite j'ai dans ma class circuit un attribut qui se trouve être la liste des voitures présentes sur le circuit...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class Circuit{
    ...
    public: 
    void evolue();
    ...
    protected:
    vector<Voiture*> listeVoiture;
    ...
    };
    Maintenant j'ai un soucis avec ma fonction evolue() de mon circuit :
    j'aimerais que pour chaque voiture contenue dans mon vector de pointeur vers des voitures, l'appel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    listeVoiture[i]->bouger(dt);
    se fasse... Mais voilà, tant qu'à faire je préférerais surcharger -> pour les vector de sorte qu'il fasse appel à chaque pointeur contenu à la fonction que je mettrais après, avec les arguments que je lui donnerais...

    De sorte à pouvoir écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void evolue(){
    double dt(0.1);  //mon pas de temps, j'ai implémenté un truc qui ressemble à la dérivée pour calculer mes vitesses et inversement un truc qui se trouve être l'intégrale pour mettre à jour mes positions en fonction d'une vitesse.
    listeVoiture->bouger(dt);
     
    if(vainqueur())
    {...}
    else
    evolue();
    }
    Et j'y tiens, j'aimerais surcharger un opérateur de sorte à rendre l'appel à une fonction pour l'ensemble des pointeurs d'un vector plus aisée

    Je sais, je suis têtu, mais bon ^^' J'apprends

    Donc pas moyen de faire un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    template <typename S>
    void operator->(const vector<S> & hop, FONCTION fonc(ARG) ){
        for(size_t y=0;y<(hop.size());++y) 
    (hop[y])->fonc(ARG);
        }
    Ou alors via une macro peut-être??
    Mais ça je connais pas du tout du tout, j'ai juste vu le mot en fouinant dans le forum

    PS : les fautes du genre *Truc au lieu de Truc* ne sont pas relevantes, après tout j'écris les codes d'exemple à la volée sans les passer au compilateur ^^'
    Donc faute de frappe

  4. #4
    Membre chevronné
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Points : 1 921
    Points
    1 921

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 11
    Points : 0
    Points
    0
    Par défaut
    Non, pas vraiment : j'ai déjà repéré le for_each, mais à moins que je ne les aie mal compris, lui et son fonctionnement, ce n'est pas ce que je cherche... ou bien ?
    En effet, avec for_each, on arrive à appliquer une fonction avec comme argument les éléments contenus dans le vector... Mais on y arrive pas à appeler une méthode de l'objet contenu dans mon vector... !!!

  6. #6
    Membre chevronné
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Points : 1 921
    Points
    1 921

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 11
    Points : 0
    Points
    0
    Par défaut
    Ah !!!
    I get it !

    Je vois, en effet ça passe, mais tu utilises un foncteur...

    Je ne connais pas bien les foncteurs, j'ai juste lu un chapitre là-dessus dans un bouquin et j'ai jamais trouvé l'utilité que ça pouvait avoir, mais là, je comprends mieux.


    C'est génial comme technique ^^


    Mais j'ai encore un soucis :
    j'ai un template vector<typename V>
    j'ai une classe voiture...
    et une autre moto...
    j'ai un operator ->*

    Et maintenant j'aimerai que dans mon circuit, je puisse faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class circuit {
    vector<Voiture*> listV;
    vector<Moto*> listM;
     
    void remplir_list() {
    listV/M.push_back(...);
     ...
    }
     
    void evolue {
    listV->*bouger();
    listM->*bouger();
    ...
    }
    Donc je pensais à un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      struct inter
    {
      void operator()(pointeur_type_quelconque const& c) { c.some_methods(); }
    };
    Mais pour faire ce pointeur d'un type quelconque, il faut que je fasse un template du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    template<typename A>
    typedef A* pointe;
    Donc ça donnerait :


    et ensuite pour mon opérateur le mélange de tout ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    template <typename N>
    void operator->*(const vector<N> & vec, UnaryFunction fonc){
     struct inter
    {
      void operator()(N const& c) { c->fonc(); }
    };
     
    for_each(vec.begin(), vec.end(),inter())}
    En effet, j'aimerais donner simplement le nom de la méthode à mon opérateur et qu'il me fasse tout ça, mais là, je suis vraiment pas sur de moi...

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 11
    Points : 0
    Points
    0
    Par défaut
    Rahhh, alors j'ai découvert que je ne pouvais pas faire de surcharge externe de -> a priori...
    Donc c'est pour ça que j'aimerai le faire avec ->* mais j'y arrive vraiment pas : comment dois-je prototyper ma surcharge ???
    J'en suis à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    template <typename A>
    unary_function operator->*(const vector<A> & vehic, unary_function fonc()){
     
    struct fait{
        void operator()(A const& v) { v->fonc(); } }
     
    for_each(vehic.begin(),vehic.end(),fait());
    }
    Et là, il me dit " 2 : expected constructor, destructor, or type conversion before ‘operator’"

    Alors, comment faire pour faire ma surcharge ??

  9. #9
    Invité
    Invité(e)
    Par défaut
    Tu ne peux pas du tout surcharger ->* (ni .* d'ailleurs)... Mais vraiment il n'y a aucun interet à utiliser un operateur ici (les opérateur s'utilisent 'as builtin does', or je n'ai jamais vu d'operateur pour boucler sur un tableau intégré).
    Par contre tu peux faire ce que tu veux très simplement avec adapter, binder & co :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::for_each(moto.begin(), moto.end(), std::mem_fun(&Moto::fonction_membre_a_appeler));

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 11
    Points : 0
    Points
    0
    Par défaut
    Moui, le problème c'est que j'ai beaucoup de collection hétérogène, avec des pointeurs donc et que j'ai beaucoup de méthodes à appeler dans mes classes ^^'

    Typiquement, moto à 5 méthodes, j'ai au moins 3 vector<Moto*> et je dois faire à peu près une 12aine d'appel à des méthodes de moto pour l’entièreté de mes vector...
    Et c'est juste dans une fonction...
    Après j'en au d'autre, Voiture, F2000, Avion, Helico, Circuit, Virage, Bout_Droit, Chicane

    Et à chaque fois j'ai des vector de pointeurs et à chaque fois je dois faire appel à une méthode précise pour chacun des membres de mon vector...
    Typiquement dans ma fonction evolue(), tous mes vehicules doivent faire appel à leur methode bouger()... et ça me fait un tas de pointeurs qui doivent appeler la methode en question...

    D'où mon envie de surcharger un opérateur, je m'en fiche lequel, pour ça faire !!


    PS: -> et ->* peuvent être surcharger : http://msdn.microsoft.com/en-us/libr...(v=vs.71).aspx
    Par contre le "." ne peut pas l'être... mais "," oui...

  11. #11
    Membre chevronné
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Points : 1 921
    Points
    1 921
    Par défaut
    revois ton design, il a l'air bancal

  12. #12
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 11
    Points : 0
    Points
    0
    Par défaut
    Moui, bin disons que c'est un programme qui tient actuellement en 63 fichiers (.h et .cc confondus) et que ça m’embêterait de revoir les quelques 38 fichiers qui sont concernés par mon soucis... ^^'

    Donc ça m'arrangerait si on m'aidait à trouver une solution concrète et non simplement me dire de "revoir mon design" parce que ça fait beaucoup là...

    Tiens, par exemple je pourrais faire un template pour une fonction binaire et laisser tomber ma surcharge... non ??

  13. #13
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 629
    Points : 30 692
    Points
    30 692
    Par défaut
    Salut,

    Pourquoi ne pas, tout simplement, créer une classe "collection" personnelle, qui te permettrait d'encapsuler tes vecteurs de pointeurs
    Cela pourrait prendre une forme proche de
    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
    class MyMotoCollection
    {
        /* just for simplicity */
        typedef std::vector<Moto*> vector;
        public:
            typedef vector::const_iterator const_iterator;
            /* ctors and dtors should be defined according to yours memory and
             * copy managment rules 
             */
            void computeEvolution() const
            {
                for( const_iterator it = tab_.begin(); it!= tab_.end(); ++it)
                {
                    (*it)->foo(); // calls Moto::foo
                    (*it)->bar();
                    /* ...*/
                }
            }
            /* other stuffs */
            void push_back(Moto *);
            void remove(Moto *);
            bool exists(Moto *) const;
            /* ... are them usefull ?*/
            const_iterator begin() const{return tab_.begin();}
            const_iterator end() const{return tab_.end();}
            size_t size() const{return tab_.size();}
        private:
            vector tab_
    };

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    Même si tu surchargeais -> (ce qui est effectivement possible) ça ne te permettrait pas de faire ce que tu souhaites. Si tu essaies d'imaginer comment programmer un tel truc, tu tomberais sur un problème : ce qu'il y a à droite de la flèche n'est pas un paramètre, c'est un identifiant qui n'a de sens qu'en tant que tel et qui ne peut donc pas être réutilisé. Ce que tu souhaites faire nécessite de la méta-programmation qui n'est possible en C++ qu'avec l'usage des macros et dans une moindre mesure avec des templates.

    Si tu ne veux/peux pas revoir le design à ce point ci, c'est peut être qu'il est déjà trop tard et que tu dois te résigner à utiliser la solution la plus directe qui te tombe sous la main, quitte à utiliser beaucoup (trop) d'iterateurs pénibles ou de foncteurs lourdingues. Tant pis, la vie est ainsi faite.

    Sinon, si tu acceptes des modifications de quelque envergure, une piste à visiter : si tu as plusieurs objets qui ont les mêmes méthodes, et sur qui tu fais les mêmes opérations (ce qui est le cas dans ton exemple) alors, ça signifie que ces objets doivent être des instances d'une même classe de base, et que sous réserve que les méthodes que tu appelles soient virtuelles, tu peux les stocker dans une seule et unique collection. Tu perdrais alors le fait que tu sais trouver rapidement tous les objets d'une même classe, bien que tu puisses conserver des collections redondantes pour ça, avec l'intégrité à maintenir. Mais tu pourras regrouper plus facilement les traitements similaires entre objets de la même classe, ce qui est l'une des principales choses qui a inspiré la programmation objet.

  15. #15
    Membre chevronné
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Points : 1 921
    Points
    1 921
    Par défaut
    Citation Envoyé par Blustuff Voir le message
    Ce que tu souhaites faire nécessite de la méta-programmation qui n'est possible en C++ qu'avec l'usage des macros et dans une moindre mesure avec des templates.
    C'est plutot template avant macros

    Citation Envoyé par Blustuff Voir le message
    Si tu ne veux/peux pas revoir le design à ce point ci, c'est peut être qu'il est déjà trop tard et que tu dois te résigner à utiliser la solution la plus directe qui te tombe sous la main, quitte à utiliser beaucoup (trop) d'iterateurs pénibles ou de foncteurs lourdingues. Tant pis, la vie est ainsi faite.

    Sinon, si tu acceptes des modifications de quelque envergure, une piste à visiter : si tu as plusieurs objets qui ont les mêmes méthodes, et sur qui tu fais les mêmes opérations (ce qui est le cas dans ton exemple) alors, ça signifie que ces objets doivent être des instances d'une même classe de base, et que sous réserve que les méthodes que tu appelles soient virtuelles, tu peux les stocker dans une seule et unique collection. Tu perdrais alors le fait que tu sais trouver rapidement tous les objets d'une même classe, bien que tu puisses conserver des collections redondantes pour ça, avec l'intégrité à maintenir. Mais tu pourras regrouper plus facilement les traitements similaires entre objets de la même classe, ce qui est l'une des principales choses qui a inspiré la programmation objet.
    Ou bien definir un concept et beneficier des avantages du polymorphisme statique. L'objet c'est bien en abusé ca craint

  16. #16
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 11
    Points : 0
    Points
    0
    Par défaut
    Hello, alors finalement j'ai trouvé une solution qui fonctionne assez bien, tant que je n'ai pas recours à plus d'un argument dans mes méthodes :

    j'ai fait un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    template<typename A, typename B, typename C>
    void applique(const & A truc, B metho, C param){
    for_each(truc.begin(),truc.end(),bind2nd(mem_fun(metho),param));
    }
    Et ensuite j'ai qu'a passé ma méthode en faisait attention à bien résoudre la porté de ma méthode et d'en donner l'adresse genre si j'ai :
    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
    class D {
    private :
    double puissance;
     
    public : 
    D(double p) : puissance(p){};
     
    void explose(double freq){
    for(int i(0); i< freq; ++i)
    cout << "boum : " << p << endl;}
     
    void charge(){
    ++puissance;
    };
     
    vector<*D> chose ;
    alors j'écris :

    applique(chose, &D::explose, 2);

    par exemple...
    Mais j'ai un problème quand je veux pas mettre d'argument, si je prends pas de double par exemple dans ma fonction charge()... Je sais pas comment faire pour l'appeler sans prendre d'argument, si je fais juste un mem_fun() sans bind2nd ça fonctionne pas...

  17. #17
    Membre chevronné
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Points : 1 921
    Points
    1 921
    Par défaut
    boost::bind pour un vrai binder qui marche

  18. #18
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    Citation Envoyé par Joel F Voir le message
    C'est plutot template avant macros
    Non, les templates permettent moins à cause des restrictions syntaxiques. Il reste toujours des choses qui ne se font qu'avec des macros.

    Ou bien definir un concept et beneficier des avantages du polymorphisme statique. L'objet c'est bien en abusé ca craint
    Hors sujet.

  19. #19
    En attente de confirmation mail

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Doubs (Franche Comté)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Points : 3 311
    Points
    3 311
    Par défaut
    @Blustuff: Joel a pas dit que les macros ne servaient jamais, il a dit que quand on fait de la méta-prog, on pense d'abord aux templates, c'est eux qui permettent à la méta-prog C++ d'exister comme un "vrai" langage.

  20. #20
    Membre chevronné
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Points : 1 921
    Points
    1 921
    Par défaut
    Citation Envoyé par Blustuff Voir le message
    Non, les templates permettent moins à cause des restrictions syntaxiques. Il reste toujours des choses qui ne se font qu'avec des macros.
    Le forum C c'est le lien d'a coté

Discussions similaires

  1. libération de la mémoire pour un vector de pointeur
    Par bobo034 dans le forum Débuter
    Réponses: 7
    Dernier message: 13/08/2008, 17h06
  2. pb avec vectors de pointeurs
    Par e-teo dans le forum SL & STL
    Réponses: 5
    Dernier message: 27/07/2005, 14h11
  3. [TListColumn] Comment le surcharger notemment pour l'IDE ?
    Par phplive dans le forum Composants VCL
    Réponses: 14
    Dernier message: 25/05/2005, 16h44
  4. Réponses: 8
    Dernier message: 26/08/2004, 18h59
  5. vector de pointeurs sur des objet
    Par jean-bobby dans le forum SL & STL
    Réponses: 26
    Dernier message: 06/08/2004, 14h54

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