Sto leggendo su boost type erasure
e sto cercando di capire il potenziale utilizzo. Mi piacerebbe esercitarlo un po 'mentre sto leggendo tonnellate di documenti sull'argomento (sembra grande). La più citata area di applicazione che è in rete/scambiare dati tra client e server. Puoi suggerire qualche altro esempio o esercizio in cui posso giocare con questa libreria?pratica e scoperta di Boost Type Erasure
risposta
Tipo La cancellazione è utile in una quantità straordinaria di situazioni, al punto in cui può essere effettivamente considerata una funzionalità linguistica fondamentalmente mancante che collega gli stili di programmazione generici e orientati agli oggetti.
Quando definiamo una classe in C++, che cosa realmente stiamo definendo è sia una molto specifica type
e molto specifico interface
, e che queste due cose non devono necessariamente essere in relazione. A type
si occupa dei dati, dove il interface
si occupa delle trasformazioni su quei dati. Il codice generico, ad esempio nell'STL, non si preoccupa di type
, si occupa di interface
: è possibile ordinare qualsiasi contenitore o sequenza simile a un contenitore utilizzando std::sort
, purché fornisca confronto e iteratore interface
.
Sfortunatamente, il codice generico in C++ richiede il polimorfismo in fase di compilazione: templates
. Questo non aiuta con cose che non possono essere conosciute fino al runtime, o cose che richiedono un'interfaccia uniforme.
Un semplice esempio è questo: come si memorizzano un numero di tipi diversi in un unico contenitore? Il meccanismo più semplice sarebbe quello di memorizzare tutti i tipi in un vuoto *, magari con alcune informazioni di tipo per distinguerli. Un altro modo è riconoscere tutti questi types
hanno lo stesso interface
: recupero. Se potessimo creare un'unica interfaccia per retrieval
, quindi specializzarla per ciascun tipo, sarebbe come se una parte dello type
fosse stata cancellata.
any_iterator
è un altro motivo molto utile per fare questo: se hai bisogno di iterare su una serie di diversi contenitori con la stessa interfaccia, è necessario cancellare il type
del contenitore fuori dalla type
del iteratore. boost :: any_range è un sottile miglioramento di questo, estendendolo dagli iteratori agli intervalli, ma l'idea di base è la stessa.
Insomma, ogni volta che è necessario passare da più types
con un simile interface
ad un singolo type
con un singolo interface
, avrete bisogno di una qualche forma di cancellazione del tipo. È la tecnica runtime che identifica i modelli di tempo di compilazione.
Ciao. Nel frattempo, per riferimento ho letto anche quanto segue da Thomas Becker http://www.artima.com/cppsource/type_erasure.html http://thbecker.net/free_software_utilities/type_erasure_for_cpp_iterators/any_iterator.html –
Entrambi risorse eccellenti, ma ho pensato che potreste desiderare di conoscere la necessità più generale di cancellare i caratteri, al di là di 'any' o' any_iterator' o 'any_container'. Per quanto i puntatori di funzioni dei membri esistano solo per implementare i delegati, è possibile che le funzioni virtuali esistano principalmente per consentire la cancellazione dei tipi. È quel fondamentale di un concetto. – Alice
- 1. javap e generics 'type erasure
- 2. Java generics type erasure
- 3. Sta usando "type" come nome di attributo una cattiva pratica?
- 4. Scoperta ricorsiva di unittest
- 5. scoperta Java
- 6. Scoperta di collation di una colonna MySQL
- 7. comportamento strano attorno all'errore di compilazione "same erasure"
- 8. Che scoperta connettore sovversiva utilizzare
- 9. Scoperta di altri oggetti durante il TDD
- 10. scoperta significa usare maiale o di Hadoop
- 11. Differenza tra type = "text/css" e type = "text/stylesheet"?
- 12. scoperta membri della camera MUC come occupante
- 13. Oracle Char type e Hibernate
- 14. boost serialization e register_type
- 15. boost :: any e templates
- 16. boost asio e endian
- 17. Devo usare std :: e boost :: prefissi ovunque?
- 18. Qt e Boost RPC
- 19. Boost e Autoconf
- 20. boost :: variant e risoluzione
- 21. Scoperta del servizio Eureka senza Spring-boot
- 22. Scoperta della lingua della famiglia lisp Implementazioni .NET
- 23. Scoperta del servizio vs bilanciamento del carico
- 24. scoperta chiavi utilizzando h5py in python3
- 25. Scoperta del motivo per errore File.mkdirs()
- 26. boost contenitore multiindice di struct dipendente da template in template-type
- 27. Operatore per il cast di tipo short e type safe
- 28. Scoperta di un modello di telefono specifico in JS
- 29. Visual Studio 2010 e boost :: bind
- 30. lista Esclusione e la pratica Java
pagina 16ff di http://accu.org/var/uploads/journals/Overload116.pdf ha un articolo su dyamic C++ che utilizza la cancellazione di tipo – doctorlove
Lo sto leggendo proprio ora. Grazie per i suggerimenti. –
Direi per il networking, il polimorfismo di runtime classico è un idioma più appropriato rispetto alla cancellazione di tipo. La cancellazione dei caratteri è ottima per gestire i deletatori e gli allocatori in 'std :: shared_ptr', comunque. –