Frage

Verschiedene Compiler scheinen unterschiedliche Vorstellungen über TR1 zu haben. G ++ scheint nur enthält der Art anzunehmen:

#include <tr1/unordered_map>
#include <tr1/memory>
...

Während Microsofts Compiler nur akzeptieren:

#include <unordered_map>
#include <memory>
...

Was ich TR1 verstehen, die Microsoft Weg der richtige ist.

Gibt es eine Möglichkeit zu bekommen G ++ die zweite Version zu akzeptieren? Wie geht man im Allgemeinen Griff TR1 in einem tragbaren Weg?

War es hilfreich?

Lösung

Installieren Schub auf Ihrem Rechner.
Fügen Sie das folgende Verzeichnis auf Ihren Suchpfad.

/ boost / tr1 / TR1

siehe hier boost tr1 für Details

Wenn Sie nun schließen erhalten Sie die tr1 Version des Speichers, der std hat :: tr1 :: shared_ptr und dann schließt es die plattformspezifische Version von alle normalen Leckereien zu bekommen.

Andere Tipps

#ifdef _WIN32
    #include <unordered_map>
    #include <memory>
#else
    #include <tr1/unordered_map>
    #include <trl/memory>
#endif

Vielleicht wäre der beste Weg, einfach zu boost Bibliotheken für sie jetzt mit einem Alternative haben, wie es in vielen Fällen nutzen ähnliche Schnittstelle zu TR1 Funktionen und sind nur in einem anderen (aber konsistent) Header-Pfad und Namespace. Dies hat den Vorteil der Arbeit an Compilern, die nicht einmal haben begonnen C ++ 0x implementieren. Und es gibt viele nützliche Boost-Bibliotheken, die nicht in TR1 sind überhaupt:)

Alternativ auf G ++, könnten Sie versuchen, vorbei --std = Gnu ++ 0x auf der Kommandozeile. Dies funktioniert für und zumindest. Dann macht es in std :: tr1 zur Verfügung:

namespace std { namespace tr1 { using namespace std; } }

Das ist böse, natürlich. Ich empfehle den Boost-Ansatz hoch statt:)

Ein bisschen hacky vielleicht, aber man kann den Compiler tr1 Verzeichnis auf Ihren Include-Pfad einfach hinzuzufügen.

Wenn unter Windows das ‚tr1‘ Verzeichnis auf den Systempfad. Dann #include <memory> sollte funktionieren.

Ich fragte mich die gleiche Frage. Leider hat der technische Bericht nicht sagen, wie die Header enthalten sein sollten. Es definiert nur, dass die Erweiterungen in dem :: std :: tr1 Namensraum sein sollten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top