2017-01-16 7 views
0

I ein Script (Python symbolischen Toolbox) haben, die automatisch generiert C++ Code 11 die Einträge einer Matrix zu füllen, wie:Ersetzen Funktionszeiger von Vorlagen in 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;} 

ich jetzt ein Array von Funktionszeigern nutzen könnte alle Funktionen zu speichern und die Matrix zu füllen, das heißt:

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); 
     } 
    } 
} 

dies ist jedoch eine Leistung wichtiger Teil meines Codes und ich würde also eher nicht Funktionszeiger verwenden, zumal die Größe der Matrix und alle Funktionen sind zur Kompilierzeit bekannt. Gibt es eine gute Möglichkeit, dies mit Vorlagen oder Ähnlichem zu tun?

Hinweis: Ich habe diesen Code nicht kompiliert, also weiß ich nicht, ob es tatsächlich funktionieren würde, aber ich hoffe, Sie bekommen die Idee.

+0

Mit 14 C++, können Sie einfach 'constexpr' Funktion erstellen. – Jarod42

+0

Können Sie anstelle von C-Array 'std :: array , 2u>' verwenden? – Jarod42

+1

Warum nicht * einmal * Funktion generieren, die die gesamte Matrix ausfüllt? – immibis

Antwort

1

Wenn Sie ohnehin externen Code-Generator verwenden, dies nur generieren:

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