Esercitazioni e introduzioni a C ++ modelli di espressione
-
22-09-2019 - |
Domanda
Quali sono buone introduzioni alla creazione di C ++ sistemi modello di espressione? Vorrei esprimere i tipi aritmetica sull'utente definite, evitando valori temporanei (che può essere di grandi dimensioni), e per imparare a farlo direttamente, piuttosto che l'applicazione di una libreria esistente.
Ho trovato carta di Todd Veldhuizen originale e un esempio dal Josuttis C ++ Template libro , e un articolo di Kreft & Langer . È menzionato nella Lezione 6 di un corso di moderna C ++ , riferendosi torna a Josuttis.The POOMA introduce espressione Modelli bene.
Cerco semplice , esposizioni chiare.
Soluzione
Si dovrebbe ottenere una copia di C ++ Template: The Complete Guide .
L'esempio di codice a cui collegare non ha il testo che accompagna, che è molto utile (il capitolo sui modelli di espressione è lungo 22 pagine). Senza il testo, tutto quello che hai è il codice senza alcun commento o spiegazione di ciò che fa e come e perché lo fa.
Altri suggerimenti
Demystified essere abbastanza ben spiegato . Si inizia mostrando come implementare le espressioni matematiche, senza modelli e mostra la base blocchi di costruzione e concetti.
La seconda parte dell'articolo illustra come refactoring l'implementazione iniziale utilizzare i modelli, invece, per migliorare le prestazioni e ridurre il codice.
IMO, l'articolo è una buona alternativa per l'espressione modello capitolo 'Modelli C ++: La guida completa'.
Incoraggio vivamente di guardare in alto biblioteca Eric Niebler Boost.Proto. A materiali introduttivi molto sottili possono essere trovati su C ++ - successivo:
http://cpp-next.com/archive/2010 / 08 / espressivo-c-introduzione /
e il suo discorso alla boost'con il 2010 è anche molto interessante
Hai tutte le fonti tranne che per il C ++ libro scientifico, che è in realtà solo la carta originale (WRT a questo tema in ogni caso) ed è piuttosto antiquato. Si potrebbe guardare in C ++ Template Metaprogrammazione per le tecniche più moderne costruite dai modelli di espressione di idee, ma qualcosa di "semplice" non sta per essere prontamente disponibili fino a quando non è semplice.
Suggerisco di rivedere gli Operatori Boost a Boost Operatori - aritmetica . Questi sono i metodi che estendono le operazioni aritmetiche fondamentali ed i confronti basati su modelli.
per quello che si vuole fare, si dovrebbe guardare il codice di Boost.ublas , come fa esattamente questo.
Inizia con il file vector.hpp
e poi tornare nella gerarchia (genitori di vector<>
). Matrici sono un po 'più complesso, ma il mechanisn è lo stesso.
Ora posso consigliare di non provare a riprodurre la complessità della biblioteca come un primo tentativo, come ublas_expression
e cose del genere. Puoi farlo più semplice, rendendo il vostro tipo l'oggetto di base e quindi implementare un operatore binario.
Guarda anche qui: http://www.bnikolic.co. uk / blog / cpp-espressione-minimal.html