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 :

Policies et templates


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 10
    Points : 13
    Points
    13
    Par défaut Policies et templates
    Bonjour à tous.

    Dans le but de m'entraîner, j'ai voulu coder une classe qui imite std::vector. Celle-ci est finie, là n'est pas le problème, mais toujours dans le but de m'entraîner, j'ai voulu implémenter une méthode sort qui trie les éléments du vecteur, et tant qu'à faire, utiliser des classes de politique pour implémenter plusieurs algorithmes de tri.
    Malheureusement, cela ne marche pas. Voilà mon code:

    vector.h
    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
    #ifndef DEF_VECTOR
    #define DEF_VECTOR
     
    #include "utilities.h"
    #include "tab_sort.h"
     
    namespace myStl
    {
     
        template <typename T>
        class vector
        {
            public:
            /*  ... */
     
                template <typename Tri>
                void sort()
                {
                    Tri::sort(tab, taille);
                }
            /* ... */ 
            private:
                value_type* tab;
                size_type taille;
                size_type max_taille;
        };
        /* ... */
    }
    tab_sort.h
    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
    #ifndef DEF_TAB_SORT
    #define DEF_TAB_SORT
     
    #include "utilities.h"
     
    namespace myStl
    {
        template <typename T>
        struct bubbleSort
        {
            static void sort(T* v, size_t size)
            {
                for(size_t i=1 ; i<size ; i++)
                {
                    for(size_t j=0 ; j<size-i ;j++)
                    {
                        if(v[j] > v[j+1])
                            myStl::swap(v[j], v[j+1]);
                    }
                }
            }
        };
    }
     
    #endif
    main.cpp
    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
    #include "headers/string.h"
    #include "headers/vector.h"
     
    using namespace myStl;
     
    typedef vector<int> t_tab;
     
    int main()
    {
        t_tab v;
     
        for(int i=10 ; i ; i--)
            v.push_back(i);
     
        for(t_tab::iterator it = v.begin() ; it != v.end() ; it++)
            std::cout << *it << std::endl;
     
        std::cout << std::endl;
        v.sort<bubbleSort>(); /* Probleme a cette ligne */
     
        for(t_tab::iterator it = v.begin() ; it != v.end() ; it++)
            std::cout << *it << std::endl;
     
        return 0;
    }
    J'obtiens une magnifique erreur lors de la compilation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    myStl\main.cpp:19: error: no matching function for call to `myStl::vector<int>::sort()'
    :: === Build finished: 1 errors, 0 warnings ===
    Pourtant, il me semble bien avoir déclaré et défini cette fonction ...

    Bref, j'ai besoin de vos lumières, merci d'avance de votre patience .

  2. #2
    Alp
    Alp est déconnecté
    Expert éminent sénior

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    Il faudrait juste templater bubbleSort::sort et non pas toute la structure, auquel cas ton code devrait compiler...

    Edit : pour afficher les éléments de ton vector, utilises std::copy avec des ostream_iterator, ça ira plus vite à écrire. (cf FAQ)

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 10
    Points : 13
    Points
    13
    Par défaut
    Merci beaucoup, ça marche parfaitement .

    Pour l'affichage des éléments, c'était pour en même temps tester l'écriture vector<int>::iterator.

  4. #4
    Alp
    Alp est déconnecté
    Expert éminent sénior

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    Justement, tous les algos de la STL en principe se basent sur les itérateurs...
    Donc copy n'aurait pas marché si ton système d'itérateurs ne marchait pas.

    Bonne continuation pour le remixage de la STL.

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

Discussions similaires

  1. Variadic template policy et polymorphisme
    Par D-j-O dans le forum C++
    Réponses: 6
    Dernier message: 28/07/2014, 14h43
  2. [Templates] Quel système utilisez-vous ? Pourquoi ?
    Par narmataru dans le forum Bibliothèques et frameworks
    Réponses: 270
    Dernier message: 26/03/2011, 00h15
  3. appliquer plusieurs templates
    Par Manu_Just dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 04/04/2003, 16h26
  4. template match="node() mais pas text()"
    Par Manu_Just dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 26/03/2003, 10h52
  5. [XSLT] template
    Par demo dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 09/09/2002, 11h31

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