Partage
  • Partager sur Facebook
  • Partager sur Twitter

Bibliothèque standard de C++

Scott Meyers, accéder soi-même à la bibliothèque standard de C++

Sujet résolu
    1 décembre 2018 à 12:04:20

    Bonjour OC,

    en lisant la page 46 du livre de Scott Meyers, une idée m'est venue à l'esprit étant donné qu'il m'arrive régulièrement de devoir m'intéresser à la bibliothèque standard de C++.

    Par exemple, page 46, Scott Meyers, nous donne un "squelette" de la définition de :

    std::vector<bool>::operator[]

    Il donne :

    namespace std{
    
    template <class Allocator>
    class vector<bool, Allocator>{
       public:
    ....
    
        class reference { ... };
        reference operator[] (size_type n);
        ...
    
        };
    }



    et il met en commentaires :

    //tiré de la bibliothèqèue standard de C++

    C'est ce commentaire qui m'intéresse plus spécifiquement, car par curiosité, je voudrais aussi, par moi-même pouvoir avoir accès à cette partie de code et je ne sais pas quelle est la manip. sur codeblocks 17.12 pour le faire.

    Quelqu'un pourrait-il m'expliquer comment on fait pour accéder par soi-même au code de la bibliothèque standard de C++ ?.

    Merci


    CREDIT : "Programmez efficacement en C++, de Scott Meyers (Dunod). Copyright 2016 Dunod pour la version française 978-2-10-074391-9, et 2015 Scott Meyers pour la versio d'origine 978-1-491-90399-5"

    -
    Edité par pseudo-simple 1 décembre 2018 à 12:10:26

    • Partager sur Facebook
    • Partager sur Twitter
      1 décembre 2018 à 12:29:39

      La SL est une spécification. Et le bout de code donné correspond exactement à la spécification.

      Tu peux la retrouver dans un format compréhensible pour les humains (tout le monde ne parle pas le standardese) sur cppreference: https://en.cppreference.com/w/cpp/container/vector_bool

      Quant à l'implémentation de la SL, il en existe pratiquement une par fournisseur de compilateur. Il en eut même existé des implémentations autonomes (on n'en entend plus trop parler maintenant).

      Quant à C::B, j'imagine que tu es en mode défaut, sous windows avec GCC (donc la libstdc++). Cherches un répertoire "include/" dans l'install de C::B. Mais je te préviens, tu n'es pas prêt.

      • Partager sur Facebook
      • Partager sur Twitter
      C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
        1 décembre 2018 à 12:41:08

        Merci lmghs. Oui, j'ai juste envie de regarder un peu l'implémentation.

        Voici le répertoire dans lequel, je suis allé conformément à tes conseils :

        \Program Files (x86)\CodeBlocks\MinGW\include

        Dedans , je n'ai pas trouvé de fichier s'appelant vector.

        Comment s'appelle le fichier qui contient l'implémentation de std::vector<bool> ?

        Merci 

        -
        Edité par pseudo-simple 1 décembre 2018 à 12:47:55

        • Partager sur Facebook
        • Partager sur Twitter
          1 décembre 2018 à 14:11:54

          C'est bien "vector", mais il est peut etre dans des sous dossiers.

          De toute façon, ce n'est pas forcement très utilisable. Le code est en vrai beaucoup plus complexe que ce qu'a montreé Meyers (ou moi, la fois dernière). On a donné une version simplifiée.

          • Partager sur Facebook
          • Partager sur Twitter
            2 décembre 2018 à 15:52:46

            de mémoire, c'est  quelque par là dedans \mingw\i686-w64-mingw32. Mais bon comme l'ont très justement dit mes VDD, c'est plutôt illisible, et puis c'est de l'implémentation sans grand intérêt. L'important c'est de respecter les spécifications.
            • Partager sur Facebook
            • Partager sur Twitter
            Mettre à jour le MinGW Gcc sur Code::Blocks. Du code qui n'existe pas ne contient pas de bug
            Anonyme
              8 décembre 2018 à 23:33:18

              Avec Visual Studio. Pour le plaisir des yeux.

              _NODISCARD reference operator[](const difference_type _Off) const
              		{	// subscript
              		return (*(*this + _Off));
              		}
              

              Le début de la classe vector.

              		// CLASS TEMPLATE vector
              template&lt;class _ty="" class="" _alloc="allocator&amp;lt;_Ty"&gt;&gt;
              	class vector
              		: public _Vector_alloc&lt;_Vec_base_types&lt;_Ty, _Alloc&gt;&gt;
              	{	// varying size array of values
              
              • Partager sur Facebook
              • Partager sur Twitter

              Bibliothèque standard de C++

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown