Domanda

in C ++ Template Metaprogrammazione: Concetti, strumenti e tecniche di Boost e oltre

  

... Uno svantaggio di modelli di espressione è che tendono a favorire la scrittura di grandi dimensioni, le espressioni complicate, perché la valutazione è in ritardo solo fino a quando viene richiamato l'operatore di assegnazione. Se un programmatore vuole riutilizzare alcune risultato intermedio senza valutare in anticipo, lei può essere costretto a dichiarare un tipo complicato come:

Expression<
           Expression<Array,plus,Array>,
           plus,
           Expression<Array,minus,Array>
          > intermediate = a + b + (c - d);
  

(o peggio). Notate come questo tipo non solo esattamente e ridondante riflette la struttura del computationand quindi avrebbe bisogno di essere mantenuto come i cambiamenti della formula, ma travolge anche esso? Questo è un problema di lunga data per C ++ DSELs. La soluzione al solito è quello di catturare l'espressione utilizzando tipo di cancellazione, ma in quel caso si paga per il dispacciamento dinamica. Ci sono state molte discussioni di recente, guidato da Bjarne Stroustrup se stesso, circa il riutilizzo della parola chiave auto rudimentale per ottenere tipo detrazione dichiarazioni di variabili, in modo che quanto sopra potrebbe essere riscritto come:

auto intermediate = a + b + (c - d);
  

Questa caratteristica sarebbe un enorme vantaggio per gli autori C ++ DSEL e utenti ...

E 'possibile risolvere questo problema con l'attuale std c ++. (Non C ++ 0x)

Per esempio voglio scrivere un espressione del tipo:

Espr X, Y

Matrix A, B, C, D

X = A + B + C

Y = X + C

D: = X + Y

Dove operatore:. = Valutare l'espressione, al più tardi Tempo

È stato utile?

Soluzione

Per il momento, si può sempre usare BOOST_AUTO () al posto della parola chiave auto del C ++ 0x per ottenere risultati intermedi più facilmente.

Matrix x, y;
BOOST_AUTO(result, (x + y) * (x + y)); // or whatever.

Altri suggerimenti

Non capisco la tua domanda. auto sta per essere riutilizzati in C++0x per automatico del tipo di inferenza .

Io personalmente vedo questo come uno svantaggio per i modelli di espressione in quanto spesso relè per avere una durata di vita inferiore rispetto gli oggetti che sono costruiti su che può rivelarsi false se il modello di espressione viene catturata come spiego here .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top