表达式模板(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

Subscription expired — please renew

Pro account upgrade has expired for this site and the site is now locked. If you are the master administrator for this site, please renew your subscription or delete your outstanding sites or stored files, so that your account fits in the free plan.