Para el código en el que estoy trabajando actualmente, a veces necesitamos compilar en algunos sistemas anteriores con compiladores más antiguos (por ejemplo, ejecutamos sims en un IBM BlueGene/L antiguo, cuyo contrato de soporte dicta algún compilador de C++ bastante antiguo). El código hace uso de shared_ptrs, y fue escrito originalmente para usar std :: tr1 :: shared_ptr. Al compilar en la máquina antigua de BlueGene, me di cuenta rápidamente de que no tenía una implementación tr1 ::, así que cambié a boost :: shared_ptr. Resulta que también hay un impulso :: tr1 :: shared_ptr. Ahora que el código se está utilizando más ampliamente fuera de nuestro grupo de investigación, la portabilidad es cada vez más importante.Cómo manejar la evolución de C++ std :: namespace? por ejemplo: std :: tr1 :: shared_ptr vs. std :: shared_ptr vs. boost :: shared_ptr vs. boost :: tr1 :: shared_ptr
¿Cuál es la (mejor) práctica para manejar este tipo de problemas de biblioteca estándar en evolución en una base de código grande? Supongo que en el nuevo estándar C++ 11, shared_ptr ya no estará en el espacio de nombres tr1, lo que agrega otro potencial: std :: shared_ptr; sin embargo, supongo que el soporte generalizado para esto estará muy lejos. Me gustaría utilizar el último estándar si es posible, pero necesito mantener la portabilidad. ¿Debo seguir con el impulso?
Ya hay compiladores donde 'std :: shared_ptr' está disponible, como VC2010 y versiones recientes de g ++.Si necesita soportar una multitud de compiladores diferentes, seguir con el impulso es probablemente el más fácil. :) – Sven
Solo porque shared_ptr se agregará al espacio de nombres std :: no significa que será * eliminado * del espacio de nombres std :: tr1 ::. Sé que gcc/libstdC++ mantendrá ambos en el futuro. De hecho, estoy seguro de que el estudio visual será el mismo. – emsr
Creo que si miras a tu alrededor, el soporte para std :: shared_ptr es muy amplio en la mayoría de los compiladores en los últimos dos años como mínimo. Me quedaría con std :: first, luego buscaré std :: tr1 :: luego probaré boost en ese orden. – emsr