18 Stimmen

Ist die C++-Standardbibliothek ersetzbar?

Ist die C++-Standardbibliothek an den Compiler gebunden oder kann eine andere Implementierung bereitgestellt werden?

Ich frage mich das vor allem, weil es scheint, dass die Beziehung zwischen den typeid Schlüsselwort und std::type_info behindert dies. Die typeid Schlüsselwörter hängen von der Existenz von std::type_info was ich als eine Abhängigkeit in die falsche Richtung betrachten würde. Und ich habe keine Ahnung, wie eine benutzerdefinierte Implementierung die type_info::name() méthode.

Meine Fragen sind:

  • Ist die Standardbibliothek austauschbar?
  • Wenn ja, wie kann man dann die std::type_info

12voto

Ja, es gibt eine Vielzahl von "STLs":

  • Original STL-Implementierung von Stepanov und Lee. 1994, Hewlett-Packard. Wird nicht mehr gepflegt.
  • SGI STL, basierend auf der ursprünglichen Implementierung von Stepanov & Lee. 1997, Silicon Graphics. Wird nicht mehr gepflegt.
  • libstdc++ von gnu (war Teil von libg++)
  • libc++ von clang
  • STLPort, basierend auf SGI STL
  • Rogue Wave-Standardbibliothek (HP, SGI, SunSoft, Siemens-Nixdorf)
  • Dinkum STL-Bibliothek von P.J. Plauger

Bearbeiten:

Da es hier offensichtlich um die C++-Standardbibliothek gibt es auch einige Alternativen dazu:

11voto

Bo Persson Punkte 88207

Große Teile der Bibliothek sind unabhängig vom Compiler, wie Container und Algorithmen.

Andere Teile sind sehr stark an einen bestimmten Compiler gebunden, wie Sie festgestellt haben - type_info wobei die Bibliothek eher dokumentiert, was der Compiler tut, als dass sie es vorschreibt.

Andere ähnliche Beispiele sind bad_exception, std::size_t und C++11-Funktionen wie type_traits, atomics und std::initializer_list, die alle vom Compiler unterstützt werden müssen. Die Bibliothek muss genau darauf abgestimmt sein, was ein bestimmter Compiler tatsächlich tut.

Es ist möglich, eine Bibliothek zu schreiben, die mit mehreren Compilern zusammenarbeitet, aber nicht, ohne einen Teil des Low-Level-Codes an jeden einzelnen Compiler anzupassen. Die an anderer Stelle erwähnten Bibliotheken tun genau das.

8voto

BЈовић Punkte 59375

Sie ist austauschbar. Werfen Sie einen Blick in stl-hafen

1voto

RoundPi Punkte 5549

Ja, STL ist nicht mit dem Compiler verbunden, auch wenn verschiedene Compile seine Standard-STL-Implementierung hat. Sie können im Allgemeinen die STL-Implementierung ändern, indem Sie einige Projekteinstellungen ändern.

In vS2008 können Sie z. B. Folgendes tun

Werkzeuge->Optionen->Projekt und Lösungen -> VC++ Directoires -> Include-Felder, fügen Sie eine andere Implementierung hinzu (z.B. STL PORT), dann verschieben Sie diese Zeile an den Anfang (über die Standard-Implementierung), dann haben Sie es.

0voto

Ein weiteres Beispiel für eine alternative STL, bei der die Standardkonformität zugunsten der Geschwindigkeit geopfert wird: EASTL (von Electronic Arts) https://github.com/paulhodge/EASTL

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X