Domanda

Diversi compilatori sembrano avere idee diverse su TR1. G ++ sembra accettare solo inclusioni del tipo:

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

Mentre il compilatore Microsofts accetta solo:

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

Per quanto ho capito TR1, il modo Microsoft è quello corretto.

C'è un modo per far accettare a G ++ la seconda versione? Come si fa a gestire TR1 in generale in modo portatile?

È stato utile?

Soluzione

Installa boost sul tuo computer.
Aggiungi la seguente directory al tuo percorso di ricerca.

< Boost Directory di installazione > / boost / tr1 / tr1

vedi qui boost tr1 per dettagli

Ora quando includi < memory > ottieni la versione tr1 della memoria che ha std :: tr1 :: shared_ptr e quindi include la versione specifica della piattaforma di < memory > per ottenere tutte le prelibatezze normali.

Altri suggerimenti

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

Forse il modo migliore sarebbe semplicemente usare le librerie boost per ora, poiché in molti casi hanno alternative con un interfaccia simile alle funzionalità di TR1, e sono solo in un percorso di intestazione e spazio dei nomi diversi (ma coerenti). Questo ha il vantaggio di lavorare su compilatori che non hanno nemmeno iniziato l'implementazione di C ++ 0x. E ci sono molte utili librerie boost che non sono affatto in TR1 :)

In alternativa, su G ++, potresti provare a passare --std = gnu ++ 0x sulla riga di comando. Funziona con & Lt; unordered_set & Gt; e < unordered_map > ;, almeno. Quindi per renderlo disponibile in std :: tr1:

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

Questo è il male, naturalmente. Consiglio vivamente invece l'approccio boost :)

Forse un po 'di confusione, ma potresti semplicemente aggiungere la directory del compilatore tr1 al tuo percorso di inclusione.

Se in Windows, aggiungi la directory 'tr1' al percorso di sistema. Quindi #include <memory> dovrebbe funzionare.

Mi sono posto la stessa domanda. Sfortunatamente, il rapporto tecnico non dice come dovrebbero essere incluse le intestazioni. Definisce solo che le estensioni devono trovarsi nello spazio dei nomi :: std :: tr1.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top