在 C++11 中将函数指针替换为模板

Replace function pointers by templates in C++11

本文关键字:替换 指针 函数 C++11      更新时间:2023-10-16

我有一个脚本(python符号工具箱),它可以自动生成C++11代码来填充矩阵的条目,例如:

double J00(double a, double b) {return a+b;}
double J01(double a, double b) {return a-b;}
double J10(double a, double b) {return -a+b;}
double J11(double a, double b) {return -a-b;}

现在我可以使用函数指针数组来存储所有函数并填充矩阵,即:

typedef double  (*FillFunction) (double a, double b);
double J00(double a, double b) {return a+b;}
double J01(double a, double b) {return a-b;}
double J10(double a, double b) {return -a+b;}
double J11(double a, double b) {return -a-b;}
void main()
{
    FillFunction J[2][2] = {{J00, J01}, {J10, J11}};
    param0 = 0;
    param1 = 1;
    double Jresult[2][2];
    for(int i = 0; i < 2; i++)
    {
        for(int j = 0; j < 2; j++)
        {
            Jresult[i][j] = J[i][j](param0, param1);
        }
    }
}

但是,这是我代码中对性能至关重要的部分,因此我宁愿不使用函数指针,特别是因为矩阵的大小和所有函数在编译时都是已知的。有没有一种巧妙的方法可以使用模板或类似的东西来做到这一点?

注意:我没有编译这段代码,所以我不知道它是否真的有效,但我希望你明白这个想法。

如果你仍然使用外部代码生成器,只需生成这个:

double Jresult[2][2] = {
    {J00(param0, param1), J01(param0, param1)},
    {J10(param0, param1), J11(param0, param1)},
};