2011-12-13 12 views

Odpowiedz

2

The Wikibooks article on Expression Templates zapewnia lepszy wgląd, szczególnie ostatnia część:

Powyższy przykład nie pokazuje w jaki sposób rekurencyjny typy są generowane w czasie kompilacji. Również wyrażenie nie wygląda w ogóle jak wyrażenie matematyczne, ale tak naprawdę jest. Poniższy kod pokazuje, w jaki sposób typy są rekurencyjnie tworzone przy użyciu powtarzalnej instancji następnego przeciążonego operatora +.

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

Powyższy przeciążony operator + robi dwie rzeczy - dodaje cukier syntaktyczny i umożliwia rekurencyjną skład typ, ograniczony przez limity kompilator za. Można zatem z powodzeniem zastąpić rozmowę ocenić następująco:

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

to możliwe, należy podać odpowiednie uruchomioną Przykładowy kod w http://en.wikipedia.org/wiki/Expression_templates? Jak sprawić, by działało w tym przypadku? Dziękuję Ci. –

Powiązane problemy