表達式模板(Expression Templates)
釋義
什麼是“表達式模板(Expression Templates)”?這是一種以優美的inline表達式取代醜陋的Callback的技巧。例如,在一般情況下,我們用如下方式求一個積分:
doublef(doublex)
{
return x/(1.0+x);
}
doubleresult = integrate(f, 0.0, 10.0);
但是,有了“表達式模板(ExpressionTemplates)”,我們可以這樣做:
DoublePlaceholder x;
doubleresult = integrate(x/(1.0+x), 0.0, 10.0);
如果我們預先定義好了一個DoublePlaceholder _x(多數情況下我們會這么做),我們只需如此:
doubleresult = integrate(_x/(1.0+_x), 0.0, 10.0);
看起來很美,是吧?是怎么做到的呢?
原理參考Todd Veldhuizen的《ExpressionTemplates》
優點
便利:
更加優美的語法。 高性能:比Callback有更好的性能。
特別在Vector、Matrix等向量運算時,可減少臨時Vector/Matrix的生成,從而大大提高性能。作者(Todd Veldhuizen)在blitz++中使用了該技巧。
套用:
Blitz++, a C++ class library for scientific computing which provides performance on par with Fortran 77/90) PETE, the Portable ExpressionTemplates Engine
POOMA, parallel array classes using expression templates
Boost spirit (有翻譯的中文用戶手冊), The Spirit framework enables a target grammar to be written exclusively in C++. Inline EBNF grammar specifications can mix freely with other C++ code.
BLL (Boost Lambda Library)