Question

Différents compilateurs semblent avoir des idées différentes sur TR1. G ++ ne semble accepter que des inclus de type:

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

Alors que le compilateur Microsofts accepte uniquement:

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

Pour autant que je sache TR1, la méthode Microsoft est la bonne.

Y at-il un moyen d’obtenir que G ++ accepte la deuxième version? Comment gère-t-on généralement TR1 de manière portable?

Était-ce utile?

La solution

Installez boost sur votre ordinateur.
Ajoutez le répertoire suivant à votre chemin de recherche.

< Répertoire d'installation Boost > / boost / tr1 / tr1

voir ici boost tr1 pour plus de détails

Maintenant, lorsque vous incluez < memory > vous obtenez la version tr1 de la mémoire qui contient std :: tr1 :: shared_ptr, puis la version spécifique à la plate-forme de < memory > pour obtenir tous les goodies normaux.

Autres conseils

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

Le meilleur moyen serait peut-être d'utiliser simplement les bibliothèques boost pour le moment, car dans de nombreux cas, ils ont interface similaire aux fonctionnalités TR1, et se trouvent juste dans un chemin d’en-tête et un espace de noms différents (mais cohérents). Cela présente l’avantage de travailler sur des compilateurs qui n'ont même pas commencé à implémenter C ++ 0x. Et il existe de nombreuses bibliothèques boost utiles qui ne figurent pas du tout dans TR1:

Sinon, sur G ++, vous pouvez essayer de passer --std = gnu ++ 0x sur la ligne de commande. Cela fonctionne pour & Lt; unordered_set & Gt; et < unordered_map > ;, au moins. Ensuite, pour le rendre disponible dans std :: tr1:

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

C'est mal, naturellement. Je recommande fortement l’approche boost à la place:)

Un peu malin, peut-être, mais vous pourriez simplement ajouter le répertoire tr1 du compilateur à votre chemin d'inclusion.

Si vous utilisez Windows, ajoutez le répertoire "tr1" au chemin du système. Ensuite, #include <memory> devrait fonctionner.

Je me suis posé la même question. Malheureusement, le rapport technique ne dit pas comment inclure les en-têtes. Il définit uniquement que les extensions doivent être dans l'espace de noms :: std :: tr1.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top