Pregunta

Los diferentes compiladores parecen tener ideas diferentes sobre TR1. G ++ solo parece aceptar incluye del tipo:

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

Mientras que el compilador Microsofts solo acepta:

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

En cuanto a lo que entiendo TR1, la forma de Microsoft es la correcta.

¿Hay alguna forma de hacer que G ++ acepte la segunda versión? ¿Cómo se maneja en general TR1 de forma portátil?

¿Fue útil?

Solución

Instale boost en su máquina.
Agregue el siguiente directorio a su ruta de búsqueda.

< Boost Install Directory > / boost / tr1 / tr1

vea aquí boost tr1 para más detalles

Ahora cuando incluye < memory > obtienes la versión tr1 de la memoria que tiene std :: tr1 :: shared_ptr y luego incluye la versión específica de la plataforma de < memory > para obtener todas las golosinas normales.

Otros consejos

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

Quizás la mejor forma sería simplemente usar las bibliotecas boost por ahora, ya que en muchos casos tienen alternativas con un interfaz similar a las características de TR1, y están en una ruta de encabezado y espacio de nombres diferente (pero consistente). Esto tiene la ventaja de trabajar en compiladores que ni siquiera han comenzado implementando C ++ 0x. Y hay muchas bibliotecas de impulso útiles que no están en TR1 en absoluto :)

Alternativamente, en G ++, puede intentar pasar --std = gnu ++ 0x en la línea de comando. Esto funciona para & Lt; unordered_set & Gt; y < unordered_map > ;, al menos. Luego, para que esté disponible en std :: tr1:

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

Esto es malvado, naturalmente. En su lugar, recomiendo el enfoque de impulso :)

Tal vez un poco hacky, pero podría simplemente agregar el directorio del compilador tr1 a su ruta de inclusión.

Si está bajo Windows, agregue el directorio 'tr1' a la ruta del sistema. Entonces #include <memory> debería funcionar.

Me hice la misma pregunta. Desafortunadamente, el informe técnico no dice cómo se deben incluir los encabezados. Solo define que las extensiones deben estar en el espacio de nombres :: std :: tr1.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top