library c++ include c++11 portability tr1

boost library c++ download



¿Cómo se incluye uno TR1? (6)

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

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

Mientras que el compilador de Microsofts solo acepta:

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

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

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


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

<Boost Install Directory> / boost / tr1 / tr1

ver aquí impulsar tr1 para más detalles

Ahora, cuando incluye <memory>, obtiene 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 todos los beneficios normales.


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


Quizás la mejor manera sería simplemente usar las bibliotecas boost por ahora, ya que en muchos casos tienen alternativas con una interfaz similar a las características de TR1, y se encuentran 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 a implementar C ++ 0x. Y hay muchas bibliotecas de refuerzo útiles que no están en TR1 en absoluto :)

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

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

Esto es malvado, naturalmente. Recomiendo encarecidamente el enfoque de impulso en su lugar :)


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


Un poco pirateado quizás, pero simplemente podría agregar el directorio tr1 del compilador a su ruta de inclusión.


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