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

SL & STL C++ Discussion :

Etendre la STL


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Avatar de NewbiZ
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2002
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2002
    Messages : 184
    Par défaut Etendre la STL
    Bonjour,

    Je suis en train d'écrire quelques conteneurs thread-safe en ce moment, et tant qu'à faire, je me suis dit que ca pourrait être sympa qu'ils gardent une interface implicite STL-compliant.

    J'aimerais par exemple que ma concurrent_deque puisse être utilisée comme une std::queue.

    Aussitot dit, aussitot fait, je retrousse mes manches et commence à recopier l'interface de std::deque, et jette un coup d'oeil à l'implémentation de la SGI... et là je commence à avoir quelques gouttes de sueur

    Utiliser des iterators et des allocators c'est une chose, mais quand il s'agit de faire un conteneur qui puisse s'en abstraire, et de créer ses propres iterators, ca commence à devenir plus méchant.

    L'implémentation de la SGI n'aide pas trop, c'est bourré de petites structures à eux, et autres traits non standards. Du coup, impossible de réutiliser tout ca.

    Donc voilà, je suis à la recherche de bons articles (ou livres) qui traiteraient de l'extension de la STL: conteneurs, itérateurs, et algorithmes (la totale, soyons fou).
    Pas simple à trouver! Je pensais avoir réussi avec "Generic Programming and the STL: Using and Extending the C++ Standard Template Library" mais les commentaires que j'en voit laissent penser que c'est plutot une référence qu'un guide d'extension.
    On trouve quelques articles là dessus sur internet, mais la plupart très vagues.

    Donc voilà, je tente le coup, si vous avez de bonnes références sur le sujet, décrivant bien les "bonnes pratiques" et pièges à éviter, pour étendre la STL de façon propre et portable.

  2. #2
    Membre expérimenté Avatar de Nogane
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    241
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 241
    Par défaut
    Bonjour,
    Ici tu trouvera les méthodes a implémenter dans ton iterator, en fonction du type d'iterator:
    http://www.cplusplus.com/reference/std/iterator/

    Pour te faciliter encore plus la vie, tu peut utiliser boost::iterator_facade:
    http://www.boost.org/doc/libs/1_40_0...or_facade.html

    En gros il suffit d'hériter de cette class et de redéfinir quelque fonctions privées style dereference(), equal(j), increment(), etc..., et hop tu as un zoli iterator parfaitement fonctionnel.

Discussions similaires

  1. etendre la STL
    Par randomlyGenerated dans le forum SL & STL
    Réponses: 10
    Dernier message: 19/11/2006, 13h12
  2. STL::vector crash a l"execution
    Par sebA dans le forum MFC
    Réponses: 2
    Dernier message: 16/06/2004, 16h36
  3. Probleme de Compilation de la STL
    Par stoluup dans le forum MFC
    Réponses: 3
    Dernier message: 05/05/2004, 17h25
  4. STL : std::set problème avec insert ...
    Par Big K. dans le forum MFC
    Réponses: 13
    Dernier message: 08/11/2003, 01h02
  5. [Kylix] [BCB] pb avec la STL
    Par pykoon dans le forum EDI
    Réponses: 1
    Dernier message: 29/12/2002, 12h56

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