Per il codice al momento sto lavorando, a volte abbiamo bisogno di compilare su alcuni sistemi meno recenti con compilatori più vecchi (ad esempio, eseguiamo sim su un IBM BlueGene/L precedente, il cui contratto di supporto impone un compilatore C++ piuttosto vecchio). Il codice stesso usa shared_ptrs, e fu originariamente scritto per usare std :: tr1 :: shared_ptr. Durante la compilazione sulla vecchia macchina BlueGene, mi sono subito reso conto che non ha una tr1 :: implementation, quindi sono passato a boost :: shared_ptr. Risulta anche un boost :: tr1 :: shared_ptr. Ora che il codice viene utilizzato più ampiamente al di fuori del nostro gruppo di ricerca, la portabilità sta diventando ancora più importante.Come gestire l'evoluto C++ std :: namespace? es: std :: tr1 :: shared_ptr vs. std :: shared_ptr vs boost :: shared_ptr vs boost :: tr1 :: shared_ptr
Che cos'è una (la?) Migliore pratica per gestire questi tipi di problemi di libreria standard in evoluzione in una base di codice di grandi dimensioni? Sto assumendo che nel nuovo standard C++ 11, shared_ptr non sarà più nel namespace tr1, che aggiunge un altro potenziale: std :: shared_ptr, tuttavia immagino che un supporto diffuso per questo sarà un modo diverso. Mi piacerebbe utilizzare l'ultimo standard, se possibile, ma devo mantenere la portabilità. Dovrei limitarmi ad aumentare?
Ci sono già compilatori dove 'std :: shared_ptr' è disponibile, come VC2010 e versioni recenti di g ++.Se hai bisogno di supportare una moltitudine di compilatori diversi, il potenziamento è probabilmente il più semplice. :) – Sven
Solo perché shared_ptr verrà aggiunto allo spazio dei nomi std :: non significa che sarà * rimosso * dallo spazio dei nomi std :: tr1 ::. So che gcc/libstdC++ manterrà entrambi andando avanti. In effetti, sono sicuro che lo studio visivo sarà lo stesso. – emsr
Penso che se ti guardi intorno, il supporto per std :: shared_ptr è molto ampio nella maggior parte dei compilatori negli ultimi due anni almeno. Rimanerei con std :: first, quindi cerca std :: tr1 :: quindi prova ad aumentare in questo ordine. – emsr