繁体   English   中英

表达式模板和求和符号

[英]Expression template and summation symbol

我正在为量子力学编写一个小型库,我想使用表达式模板来形成算子表达式。 尤其是用表达模板形成哈密顿量。

我基本上遵循此源代码来构造代码并重载相应的运算符+ *-: https//en.wikipedia.org/wiki/Expression_templates

形成哈密顿量的表达式需要求和

Vec x = u_1 + u_2 + ... + u_N

其中N是(常量)整数,u_i也是Vec类型。 在代码中编写此表达式有效,但我希望能够编写

Vec x = Sum_{i=0}^{N} u_i

一个人怎么做?

------------编辑------------

经过一番研究并在注释的帮助下,我想到了一个静态for循环的概念。在谷歌搜索之后,我在http://www.drdobbs.com/loops-metaloops-c/184401835?pgno中找到了一篇文章= 8这正是我所需要的。

无法编写模板或函数以魔术方式匹配周围范围的变量,因此您的u_i语法无法正常工作。 您可以对宏执行类似的操作,例如:

#define SUM_4(x) x ## 1 + x ## 2 + x ## 3 + x ## 4

用法:

Vec u_1, u_2, u_3, u_4;
...
Vec x = SUM_4(u_);

您需要为其他数量的源向量定义其他宏。

C ++中的下标运算符通过数组访问来建模,例如u[1], u[2], ... 如果您愿意维护一个Vec数组,则可以编写一个遍历该数组的泛型函数。 在这种情况下,参数将是数组。 就像是:

template<typename T, int N>
T sum(T (&u)[N])
{
    // (or your preferred summation procedure)
    T x = u[0];
    for (int i=1; i < N; ++i)
        x += u[i];
    return x;
}

用法:

Vec u[4];
...
Vec x = sum(u);

甚至最好使用std::vector或固定大小的数组模板。

PS考虑使用本

编辑:从数组http://www.cplusplus.com/articles/D4SGz8AR/更新了具有数组大小推导的sum()模板

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM