2011-12-13 16 views

risposta

2

Il Wikibooks article on Expression Templates fornisce un quadro più chiaro, soprattutto l'ultima parte:

L'esempio di cui sopra non mostra come i tipi ricorsiva vengono generati a tempo di compilazione. Inoltre, expr non sembra affatto un'espressione matematica, ma è davvero uno. Il codice che segue mostra come i tipi sono composti in modo ricorsivo usando l'istanza ripetitiva del seguente operatore + sovraccarico.

template< class A, class B > 
DExpression<DBinaryExpression<DExpression<A>, DExpression<B>, Add> > 
operator + (DExpression<A> a, DExpression<B> b) 
{ 
    typedef DBinaryExpression <DExpression<A>, DExpression<B>, Add> ExprT; 
    return DExpression<ExprT>(ExprT(a,b)); 
} 

che questo sovraccarico operatore + fa due cose - aggiunge zucchero sintattico e consente composizione tipo ricorsivo, delimitata da limiti del compilatore. Può quindi essere utilizzato per sostituire la chiamata a valutare come segue:

evaluate (a.begin(), a.end(), x + l + x); 
/// It is (2*x + 50.00), which does look like a mathematical expression. 
+0

è possibile per voi fornire un esempio di esecuzione per il codice che http://en.wikipedia.org/wiki/Expression_templates? Come farlo funzionare in questo caso? Grazie. –

Problemi correlati