2011-08-01 4 views
16

La bibliothèque standard C++ est-elle liée au compilateur ou une implémentation différente peut-elle être fournie?La bibliothèque standard C++ est-elle remplaçable?

Je m'interroge à ce sujet principalement parce qu'il semble que la relation entre le mot-clé typeid et std::type_info gêne cela. Les mots-clés typeid dépendent de l'existence de std::type_info, que je considérerais comme une dépendance dans la mauvaise direction. Et je n'ai aucune idée comment une implémentation personnalisée devrait implémenter la méthode type_info::name().

Mes questions sont les suivantes:

  • est-elle remplaçable de bibliothèque standard?
  • Si oui, comment peut-on mettre en œuvre std::type_info
+6

Note au répondant: STL! = Bibliothèque standard. Le STL est simplement une partie de la bibliothèque standard. Le STL est remplaçable avec simplement une bibliothèque. La bibliothèque standard ne l'est pas. –

Répondre

10

Une grande partie de la bibliothèque sont indépendants du compilateur, comme des conteneurs et des algorithmes.

D'autres parties sont très liées à un compilateur spécifique, comme vous avez trouvé - type_info où la bibliothèque documente plutôt ce que le compilateur fait plutôt que de le prescrire.

D'autres exemples similaires pourraient être bad_exception, std :: size_t, et des fonctionnalités C++ 11 comme type_traits, atomics, et std :: initializer_list, qui ont tous besoin du support du compilateur. La bibliothèque doit être étroitement liée à ce qu'un compilateur spécifique fait réellement.

Il est possible d'écrire une bibliothèque qui fonctionne avec plusieurs compilateurs, mais pas sans accorder du code de bas niveau à chaque compilateur spécifique. Les bibliothèques mentionnées ailleurs font exactement cela.

7

Il est remplaçable. Jetez un coup d'oeil dans stl port

+0

Je ne suis pas sûr, mais 'std :: type_info' pourrait nécessiter le support du compilateur. –

+0

C'est le cas. STLPort a défini la configuration pour chaque compilateur qu'il supporte. –

+0

La dernière version de STLport date d'il y a 2,5 ans. Pas ce que j'appellerais un projet OSS florissant. Ont-ils même commencé à aborder des choses comme les traits de type C++ 11? – sbi

11

Eh oui, il y a une variété de '' STL:

  • mise en œuvre originale STL par Stepanov et Lee. 1994, Hewlett-Packard. Plus maintenu.
  • SGI STL, basé sur la mise en œuvre originale par Stepanov & Lee. 1997, Silicon Graphics. Plus maintenu.
  • libstdC++ de gnu (faisait partie de libg ++)
  • libC++ de clang
  • STLPort, basé sur SGI STL
  • bibliothèque standard Rogue Wave (HP, SGI, SunSoft, Siemens-Nixdorf)
  • Dinkum STL bibliothèque par PJ Plauger

Edit:

Puisque c'est apparemment sur la bibliothèque standard C++ , il y a des alternatives à cela aussi:

+1

+1: MS Visual Studio a sa propre implémentation. – Naszta

+1

@Naszta - Basé sur la bibliothèque Dinkumware. –

+1

@Naszta Non, VS utilise la bibliothèque Dinkumware avec des éléments spécifiques VS ajoutés. – Praetorian

0

Oui, STL n'est pas lié avec le compilateur même si sa mise en œuvre STL par défaut est différente. Vous pouvez généralement modifier l'implémentation STL en modifiant certains paramètres du projet.

E.g. Dans vS2008, vous pouvez faire

Outils-> Options-> Projet et Solutions -> VC++ Directoires -> Inclure les fichiers, ajouter une implémentation différente (par exemple STL PORT), puis déplacer cette ligne vers le haut (au-dessus de l'implémentation par défaut)), alors vous l'avez.

+0

Quelqu'un a-t-il soin d'ajouter pourquoi il/elle a eu une downvote? Est-ce juste pour une faute de frappe? Si oui, je parie que vous n'avez pas lu mes réponses à la place que vous venez de lire le premier mot ... – Gob00st

+0

Juste une supposition, mais vous utilisez "STL" et "bibliothèque standard" comme s'ils étaient interchangeables. Ce qu'ils ne sont pas. (D'après ce que je peux voir, vous semblez vouloir dire la bonne chose, mais il est difficile de dire que vous confondez les termes.) – sbi

Questions connexes