Funktionen als Parameter übergeben in C / C++


Jeder kennt es, er schonmal an einem Projekt gearbeitet hat. Irgendwann steht man bei C / C++ vor dem Problem, wie teile ich der Funktion mit, dass
sie einmal die eine Routine aufrufen soll, und in einem anderen Fall die andere.

Sowas in dieser Art:

Beispiel:


int funktion calculate ( int para1, int para2, int fkt)
{
    int ret=0;
    switch (fkt)
    {
     case 1:
      ret = para1 + para2;
     break;
    case -1:
     ret = para1 * para2;
   };
 return ret;
}




int main(void)
{
  cout<< calc( 3,4,1)<<endl;
  cout<<calc (3,4, -1) <<endl;
}


Auch wenn einige Leute der Meinung sind, das das mit den Klassischen Sprachen nicht geht, hier das Gegenbeispiel:

#include <iostream>

using namespace std;

typedef int(*fktptr)(int,int);

int calc(int i, int j, fktptr f)
{
    return f(i,j);
}

int add(int i1, int i2)    {    return i1+i2;}
int mul(int i1, int i2)    {    return i1*i2;}

int main()
{
    int x=7;
    int y=9;
   
    cout<<calc(add,x,y)<<endl;
    cout<<calc(mul,x,y)<<endl;
    int i=7, j=0;
    i= i/j;
    return i;

}


Achso, ich habe es "nur" mit dem GCC 4.x getestet. Dort klappts :-)



Ich gebe zu, es ist kein schönes Beispiel, aber man kann die Problematik bzw die Lösung erkennen (hoffe ich)