表达式模板(Expression Templates)

释义

什么是“表达式模板(Expression Templates)”?这是一种以优美的inline表达式取代丑陋的Callback的技巧。例如,在一般情况下,我们用如下方式求一个积分:

double f(double x)
{
    return x/(1.0+x);
}
 
...
double result = integrate(f, 0.0, 10.0);

但是,有了“表达式模板(Expression Templates)”,我们可以这样做:

DoublePlaceholder x;
double result = integrate(x/(1.0+x), 0.0, 10.0);

如果我们预先定义好了一个DoublePlaceholder _x(多数情况下我们会这么做),我们只需如此:

double result = integrate(_x/(1.0+_x), 0.0, 10.0);

看起来很美,是吧?是怎么做到的呢?

原理

优点

  • 便利:更加优美的语法。
  • 高性能:比Callback有更好的性能。

特别在Vector、Matrix等向量运算时,可减少临时Vector/Matrix的生成,从而大大提高性能。作者(Todd Veldhuizen)在Blitz++中使用了该技巧。

应用

参考文章

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License