2009-02-24 15 views
7

Ci sono molti posti in boost dove vedo una classe basata su modelli e non posso fare a meno di pensare perché la persona che l'ha scritta ha usato i modelli.Perché la spinta è così fortemente basata sui modelli?

Ad esempio, le classi mutex. Tutti i concetti mutex sono implementati come modelli in cui è possibile creare semplicemente poche classi base o classi astratte con un'interfaccia che corrisponda al concetto.

modifica dopo risposte: ho pensato al costo delle funzioni virtuali, ma a volte non vale la pena di dare pochissime penalità in termini di prestazioni per una migliore comprensione? Voglio dire a volte (specialmente con boost) è davvero difficile capire il codice basato su modelli e decrittografare gli errori del compilatore come risultato di un uso improprio dei template.

+0

sarebbe una buona domanda a questo ragazzo: http://stackoverflow.com/users/5597/anthony-williams (autore di boost.thread): p –

+0

La filosofia principale della comunità C++ è che "Ottieni solo ciò che chiedi ". Il progetto Boost sta provando, proprio come l'STL, a seguire questa filosofia progettando tutte le librerie usando i template. C'è un costo però, come dici: la comprensione a volte soffre. Se vuoi una libreria puoi capire più facilmente, forse dovresti dare un'occhiata alla libreria Qt. Contiene molto di ciò che fa Boost e altro! A mio parere, il design di Qt consente uno sviluppo su larga scala in C++, qualcosa che manca completamente a Boost. –

risposta

20

I modelli possono essere altamente ottimizzati in fase di compilazione, senza la necessità di funzioni virtuali. Molti trucchi di modelli possono essere pensati come polimorfismo in fase di compilazione. Poiché sai al momento della compilazione quali sono i comportamenti che vuoi, perché dovresti pagare per una chiamata di funzione virtuale ogni volta che usi la classe. Come bonus, un sacco di codice basato su modelli può essere facilmente inserito per eliminare anche il sovraccarico di chiamata di funzione più basilare.

Inoltre, i modelli in C++ sono estremamente potenti e flessibili - hanno dimostrato di essere un linguaggio completo di per sé. Ci sono alcune cose che sono facili da fare con i modelli che richiedono molto più lavoro con il polimorfismo di runtime.

3

I modelli consentono di eseguire una versione generica di un algoritmo. Una versione generica di un contenitore. Non devi più preoccuparti dei tipi e ciò che produci non è più legato a un tipo. Boost è una raccolta di librerie che cerca di soddisfare le esigenze di una grande varietà di persone che usano C++ nella loro vita quotidiana.