2012-03-09 16 views
11

I riferimenti di valore e la semantica Move sono una funzionalità C++ 11 che può velocizzare significativamente il codice riducendo le copie non necessarie. L'STL è stato aggiornato per utilizzare questa nuova funzione quando viene utilizzato un compilatore C++ 11/0x (ad esempio gcc 4.6)Quali librerie Boost sfruttano Move Semantics

Boost 1.48 ha introdotto una nuova libreria per emulare semantica di movimento su vecchi compilatori C++ 03. Questa libreria funziona introducendo macro che si espandono in veri e propri riferimenti rvalue quando il codice viene compilato con compilatori C++ 11 o referenze emulate rvalue quando il codice è compilato con i compilatori C++ 03.

Oltre a boost::container alcune delle librerie di potenziamento sono state aggiornate per sfruttare ancora la semantica del movimento?

Esiste una tabella di marcia che specifica quando/se la semantica del movimento verrà aggiunta ad altre librerie di boost?

boost::multi_index_container ha menzionato l'aggiunta della semantica di spostamento su Boost.MultiIndex Future work, poiché è stata introdotta nella versione 1.31.

+0

Nota : nome "STL" è deprecato e ambiguo. Utilizzare invece "Libreria standard C++". – Griwes

risposta

8

Come hai detto nella domanda, boost 1.48 ha introdotto boost::move, una libreria che emula semantica di spostamento con C++ 03. Questo è stato sviluppato da Ion Gaztanaga, che ha anche (per lo più) scritto e attualmente mantiene boost::intrusive e boost::container.

Entrambi supporto movimento semantica intrusive e contenitore - infatti boost::intrusive deve supportare la semantica di movimento per boost::container a, perché boost::container è fondamentalmente un gruppo di contenitori non intrusive realizzati avvolgendo i loro omologhi boost::intrusive. Mi sembra intruso/contenitore la motivazione per scrivere boost::move, quindi non sorprende che abbiano un vantaggio sul resto della spinta.

Ma è importante notare che non esiste una tabella di marcia o un comitato di boost: il boost è solo una raccolta di librerie che condividono la distribuzione, un sito Web e un processo di revisione/controllo qualità. Devi considerare ogni libreria come un progetto separato, che verrà aggiornato solo se e quando gli autori/manutentori sono interessati a fare il lavoro (o, naturalmente, quando invii loro una patch!).

The boost 1.48/1.49/1.50/1.51/1.52 release notes sono il posto migliore per cercare le risposte solide:

  • Boost.Interprocess ha il supporto dal 1,45, sia C++ 11 e C++ 03. Prima di 1.48, questo conteneva il codice che divenne boost.move.
  • Boost.Asio ha il supporto dall'1.47; nessuna emulazione in C++ 03
  • Boost.Intrusive ottenuto il sostegno tramite boost.move a 1.48 (C++ 11, C++ 03)
  • Boost.Container era nuovo a 1,48 con il supporto tramite spinta .move (C++ 11, C++ 03)
  • Boost.Icl ottenuto il sostegno tramite boost.move a 1.49 (C++ 11, C++ 03)
  • Boost.Unordered ottenuto il sostegno tramite boost.move in 1.49 (C++ 11, con un #define per abilitare l'emulazione in C++ 03)
  • Boost.Discussione supporta C++ 03 emulazione w/boost.move dal 1,50, le versioni più vecchie hanno C++ 11-supporto solo
  • Boost.Function aggiunti C++ 11-unico sostegno a 1,52
Problemi correlati