Domanda

Le intestazioni hash_map e hash_set non sono ancora incluse nello standard C ++, ma sono disponibili come estensioni con tutti i compilatori che ho usato di recente.

Mi chiedo quanto posso contare su questi nel vero codice senza sacrificare la portabilità. Sto lavorando a progetti di strumenti che devono essere eseguiti su una serie di architetture e compilatori, tra cui:

  • Linux (x86_64, AMD / Intel): compilatori GCC, Intel, Portland
  • AIX (Potenza): GCC, xlC
  • Cray XT Series (AMD): GCC, Portland, Pathscale Compilers
  • IBM Blue Gene Series (Potenza): xlC, GCC
  • SGI Altix (Itanium): compilatori Intel
  • Windows: Non proprio una priorità, ma sentiti libero di fornire risposte utili.

Mi rendo conto che alcuni di questi sono piuttosto esotici, ma non è questo il punto. Quali sono le tue esperienze con le estensioni STL su più piattaforme e compilatori? Sono ancora onnipresenti? tu li useresti nel tuo progetto?

È stato utile?

Soluzione

Probabilmente cerco il boost equivelant e lo uso. Almeno hanno una certa pressione da parte dei loro utenti per essere indipendenti dalla piattaforma. Non riesco a immaginare cosa succederebbe se si presentasse un bug contro i compilatori GCC e Intel e si dicesse loro di conciliare le loro differenze su come è stato implementato hash_map. Nella migliore delle ipotesi, potresti farli parlare tra loro. Supponi di averlo persino capito, quindi hai risolto solo il modo in cui i compilatori Intel e GCC sono diversi. Buona fortuna per riunire tutti gli altri e risolvere il problema in pochi anni.

Almeno con boost sai che eventuali differenze tra le piattaforme sono state elaborate da un'organizzazione ..

Modifica L'equivalente boost è apparentemente set non ordinato o < a href = "http://www.boost.org/doc/libs/1_37_0/doc/html/boost/unordered_map.html" rel = "noreferrer"> mappa non ordinata . (grazie Head Geek)

Altri suggerimenti

NO, scriveresti il ??tuo se sei un'organizzazione / progetto abbastanza grande. In questo modo puoi personalizzarli per soddisfare meglio le tue esigenze e affrontare i problemi di portabilità. EA ha fatto questo, con il suo "eastl" destinato a tutte le piattaforme di gioco, PC, Mac, XBOX360, Wii, PS2, PS3 ecc ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top