Modelli di espressione C ++

Attualmente uso C per i calcoli numerici. Ho sentito che usare i modelli di espressione C ++ è meglio per il calcolo scientifico. Cosa sono i modelli di espressione C ++ in termini semplici?

  1. Ci sono libri in giro che discutono metodi / calcoli numerici usando i modelli di espressione C ++?

  2. In che modo, i modelli di espressione C ++ sono migliori rispetto all’utilizzo di C pura?

Cosa sono i modelli di espressione C ++ in termini semplici?

I modelli di espressione sono una categoria di meta meta template C ++ che ritarda la valutazione delle sottoespressioni fino a quando non si conosce l’espressione completa, in modo che possano essere applicate le ottimizzazioni (specialmente l’eliminazione dei provvisori).

Ci sono libri in giro che discutono metodi / calcoli numerici usando i modelli di espressione C ++?

Credo che ET sia stato inventato da Todd Veldhuizen, che ha pubblicato un articolo su di esso 15 anni fa. (Sembra che molti vecchi link ad esso siano ormai morti, ma al momento qui ce n’è una versione.) Qualche materiale a riguardo è in C ++ Templates di David Vandevoorde e Nicolai Josuttis : The Complete Guide .

In che modo, i modelli di espressione C ++ sono migliori rispetto all’utilizzo di C pura?

Ti permettono di scrivere il tuo codice in modo espressivo di alto livello senza perdere prestazioni. Per esempio,

void f(const my_array a1, const my_array a2) { my_array a3 = 1.2 * a1 + a1 * a2; // .. } 

può essere ottimizzato fino in fondo

 for( my_array::size_type idx=0; idx 

che è più veloce, ma più difficile da capire.

Aggiungendo alla risposta di sbi, i modelli di espressione implementano ottimizzazioni di spioncino ad alto livello utilizzando modelli per la corrispondenza e la sintesi di modelli.

Aggiungono anche zucchero sintattico o rendono più leggibile il codice, consentendo di specificare l’algoritmo in termini di operazioni semplici. Quindi, in questo caso, la semplicità e l’eleganza sono raggiunte attraverso l’ottimizzazione tramite metaprogrammazione. Almeno, se fai tutto bene.

C’è un bell’articolo sulla matematica dei modelli C ++ nel buon vecchio archivio Flipcode (sicuramente riporta dei ricordi):

http://www.flipcode.com/archives/Faster_Vector_Math_Using_Templates.shtml