Pergunta

Os cabeçalhos hash_map e hash_set não estão incluídos no C ++ padrão ainda, mas eles estão disponíveis como extensões com todos os compiladores que eu usei recentemente.

Eu estou querendo saber o quanto eu posso contar com isso em código real, sem sacrificar a portabilidade. Eu estou trabalhando em projetos de ferramentas que precisam ser executados em um host de arquiteturas e compiladores, incluindo:

  • Linux (x86_64, AMD / Intel): GCC, Intel, Portland Compiladores
  • AIX (Power): GCC, xlC
  • Cray XT Series (AMD): GCC, Portland, PathScale Compiladores
  • IBM Blue Gene Series (Power): xlC, GCC
  • SGI Altix (Itanium): compiladores da Intel
  • Windows:. Não é realmente uma prioridade, mas fique à vontade para dar respostas úteis

Eu percebo algumas delas são bastante exótico, mas isso não é o ponto. Quais são suas experiências com extensões STL através de múltiplas plataformas e compiladores? eles são onipresentes ainda? Será que você usá-los em seu projeto?

Foi útil?

Solução

I provavelmente procurar o impulso equivelant e uso isso. Pelo menos eles têm alguma pressão de seus usuários para ser independente de plataforma. Eu não posso imaginar o que aconteceria se você entrou com um bug contra compiladores GCC e Intel e disse-lhes para reconciliar suas diferenças sobre como hash_map foi implementado. Na melhor das hipóteses você seria capaz de levá-los a falar uns com os outros. Suponha que você conseguido ainda que, em seguida, você fixa só como compiladores da Intel e do CCG são diferentes. Boa sorte para conseguir todos os outros juntos e resolver o problema dentro de poucos anos.

Pelo menos com impulso você sabe as diferenças entre plataformas estão sendo trabalhados por uma organização ..

Editar O impulso equivalente é, aparentemente, conjunto não ordenada ou < a href = "http://www.boost.org/doc/libs/1_37_0/doc/html/boost/unordered_map.html" rel = "noreferrer"> mapa não ordenada . (Graças Chefe Geek)

Outras dicas

Não, você iria escrever seu próprio, se você é um grande o suficiente organização / projeto. Dessa forma, você pode adaptá-los para melhor atender às suas necessidades e problemas de portabilidade de endereço. EA fez isso, com o seu "eastl" pretende atingir todas as plataformas de jogos, PC, Mac, Xbox 360, Wii, PS2, PS3 etc ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top