簡體   English   中英

用C ++ 11中的模板替換函數指針

[英]Replace function pointers by templates in C++11

我有一個腳本(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)},
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM