Pregunta

Los encabezados hash_map y hash_set aún no están incluidos en el estándar de C ++, pero están disponibles como extensiones con todos los compiladores que he usado últimamente.

Me pregunto cuánto puedo confiar en estos en código real sin sacrificar la portabilidad. Estoy trabajando en proyectos de herramientas que deben ejecutarse en una gran cantidad de arquitecturas y compiladores, incluidos:

  • Linux (x86_64, AMD / Intel): GCC, Intel, Compiladores de Portland
  • AIX (potencia): GCC, xlC
  • Cray XT Series (AMD): GCC, Portland, compiladores de Pathscale
  • IBM Blue Gene Series (Power): xlC, GCC
  • SGI Altix (Itanium): compiladores Intel
  • Windows: No es realmente una prioridad, pero siéntase libre de proporcionar respuestas útiles.

Me doy cuenta de que algunos de estos son bastante exóticos, pero ese no es el punto. ¿Cuáles son sus experiencias con las extensiones STL en múltiples plataformas y compiladores? ¿Son omnipresentes todavía? ¿Los usted los utilizarían en su proyecto?

¿Fue útil?

Solución

Probablemente buscaría el equivalente de impulso y lo usaría. Al menos tienen cierta presión de sus usuarios para ser independientes de la plataforma. No puedo imaginar lo que sucedería si presentaras un error contra los compiladores GCC e Intel y les dijeras que reconciliaran sus diferencias sobre cómo se implementó hash_map. En el mejor de los casos, podrías lograr que hablen entre ellos. Supongamos que incluso lo logró, entonces solo ha reparado la diferencia entre los compiladores Intel y GCC. Buena suerte al reunir a todos los demás y resolver el problema en unos pocos años.

Al menos con boost sabes que cualquier diferencia entre plataformas está siendo resuelta por una organización ...

EDIT El equivalente de impulso aparentemente es conjunto no ordenado o < a href = "http://www.boost.org/doc/libs/1_37_0/doc/html/boost/unordered_map.html" rel = "noreferrer"> mapa desordenado . (gracias Head Geek)

Otros consejos

NO, usted escribiría el suyo propio si es una organización / proyecto lo suficientemente grande. De esa manera, puede adaptarlos para que se adapten mejor a sus necesidades y abordar los problemas de portabilidad. EA hizo esto, con su "eastl" destinado a todas las plataformas de juego, PC, Mac, XBOX360, Wii, PS2, PS3, etc. ...

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