2012-02-08 13 views
19

per esempio boost::function viene spostato quasi interamente al std::function, lo stesso è con boost::shared_ptrLo standard C++ 11 fornisce qualcosa come boost :: any?

Ma non riesco a trovare std::any? È stato rinominato o non è stato inserito nel nuovo standard per nessun motivo?

+13

No. (e filler) –

+0

Non tutto in spinta è stato spostato a std tuttavia nulla vi impedisce di usarlo in spinta.Immagino che alcune librerie di boost potrebbero essere riscritte per C++ 11, alcune potrebbero essere rimosse completamente essendo piuttosto ridondanti, anche se probabilmente rimarranno disponibili per la compatibilità con le versioni precedenti. – CashCow

risposta

15

Non tutte le librerie di boost lo fanno nello standard (e anche quelli che possono avere componenti rimossi). Generalmente il comitato è piuttosto prudente quando si tratta di aggiungere allo standardlibrary (poiché è quasi impossibile ottenere qualcosa rimosso in un secondo momento se l'inclusione fosse un errore (ad esempio perché esiste un'alternativa migliore)).

boost::function e boost::shared_ptr dove quasi un dato per l'inclusione dal momento che già parte di tr1. boost::any d'altra parte non ha fatto il taglio. Potrebbe tuttavia essere incluso nella libreria standard in un secondo momento (ad esempio nel prossimo rapporto tecnico, vedi here). Sebbene sia bello avere boost::any, non lo classificherò tanto importante quanto ad es. shared_ptr.

Concludendo: boost::any non è parte di C++ 11, dal momento che il comitato non ha visto alcun bisogno pressante di includerla

+2

forse puoi aggiornare la tua risposta per riflettere 17 cambiamenti :) –

3

Penso che la posizione di default è che una libreria non sarebbe incluso nel nuovo standard a meno che non sia stato presentato per essere incluso e poi approvato il comitato.

Non sono sicuro se boost :: any è mai stato inviato. Probabilmente no. Comunque puoi ancora usare boost :: any.

La mia ipotesi è che con C++ 11 le librerie di boost verranno riscritte, alcune verranno considerate ridondanti e altre verranno modificate per utilizzare semantica di spostamento, elenchi di inizializzatori e auto quindi scritte in stile C++ 11 con C + +11 caratteristiche.

Probabilmente le nuove librerie saranno tutte in C++ 11 ma i pacchetti di boost esistenti saranno mantenuti disponibili per un po 'di tempo a venire, dato che molti non saranno passati ai compilatori C++ 11. Immagino anche che solo le funzionalità di C++ 11 implementate da tutti i principali compilatori entreranno nel pacchetto all'inizio.

Questa è probabilmente più una domanda per i programmatori che lo stackoverflow, e ancora meglio per comp.std.C++. Mailing list potenziato e potenziato.

16

Poiché la domanda è stata posta, siamo avanzati verso std :: experimental :: any come funzione optional votata allo standard C++ 14.

Era quindi implemented in GCC 5.1, almeno.

La funzione è stata da allora standardizzata in C++ 17 con conseguente std::any. Vedi anche C++ 17 std::variant per un tipo sicuro unione che detiene uno di un limitato tipo noto alternativa, o è vuoto (grazie remy-lebeau per il suggerimento).

+2

['std :: variant'] (http://en.cppreference.com/w/cpp/utility/variant) (simile a' boost :: variant') è stato anche standardizzato e apparirà in C++ 17. –

Problemi correlati