¿Cómo se incluye TR1?


Diferentes compiladores parecen tener ideas diferentes sobre TR1. G++ solo parece aceptar inclusiones 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 manera de conseguir que G++ acepte la segunda versión? ¿Cómo se maneja el TR1 de forma portátil?

Author: bdonlan, 2009-08-04

6 answers

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

/ boost / tr1 / tr1

Vea aquí boost tr1 para más detalles

Ahora cuando incluyes 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 para obtener todas las golosinas normales.

 16
Author: Martin York,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-08-04 17:35:36
#ifdef _WIN32
    #include <unordered_map>
    #include <memory>
#else
    #include <tr1/unordered_map>
    #include <trl/memory>
#endif
 12
Author: mtd,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-07-15 20:20:12

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 solo están en una ruta de encabezado y espacio de nombres diferentes (pero consistentes). Esto tiene la ventaja de trabajar en compiladores que ni siquiera han comenzado la implementación de C++0x. Y hay un montón de bibliotecas boost útiles que no están en TR1 en absoluto:)

Alternativamente, en G++, podría intentar pasar --std = gnu++0x en el línea de comandos. Esto funciona para y , al menos. Entonces para hacerlo disponible en std:: tr1:

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

Esto es malo, naturalmente. Recomiendo encarecidamente el enfoque boost en su lugar:)

 4
Author: bdonlan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-08-04 16:37:32

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

 3
Author: jon-hanson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-08-04 16:20:55

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

 2
Author: John Dibling,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-08-04 16:09:02

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.

 2
Author: sellibitze,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-09-21 18:44:16