2011-12-13 9 views

Respuesta

2

El Wikibooks article on Expression Templates proporciona una visión más clara, sobre todo la última parte:

El ejemplo anterior no muestra cómo los tipos recursivos son generados en tiempo de compilación. Además, expr no parece una expresión matemática en absoluto, pero de hecho es uno. El código que sigue muestra cómo se compusieron recursivamente los tipos utilizando la instanciación repetitiva del siguiente operador + sobrecargado.

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)); 
} 

El operador + sobrecargado por encima de hace dos cosas - se agrega el azúcar sintáctica y permite la composición de tipo recursivo, delimitada por los límites del compilador. Por lo tanto, se puede utilizar para reemplazar la llamada a evaluar de la siguiente manera:

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

es posible que usted proporciona un ejemplo de funcionamiento para el código en el http://en.wikipedia.org/wiki/Expression_templates? ¿Cómo hacer que funcione en este caso? Gracias. –

Cuestiones relacionadas