ganze Funktion übergeben

halfo11

Grünschnabel
Hallo,

ich möchte einer Prozedur oder Funktion selbst eine Funktion oder Prozedur übergeben.

Also sowas: void test(...,...,(hier die funktion/prozedur rein (test2))).
{
.....
test2(...)
...
}



void main()
{
....
test(....,funktion/proz a)
....
test (....,funktion/proz b)
...
}
Dies ist notwendig damit ich der proz. test für mehrere funktionen verwenden kann.

Wie bekomme ich das hin ?

gruß
 
Zuletzt bearbeitet:
Hallo,

Funktionen höherer Ordnung kannst du in C bspw so programmieren:

C:
#include <stdio.h>

typedef int (*funcp)(int, int);

int add(int a, int b){
    return a + b;
}

void inrement_vector(int* vector, int size, funcp a){
    int i = 0;
    for(i = 0; i < size; i++)
        vector[i] = a(vector[i], 1);
}

void print_vector(int* vector, int size){
    int i = 0;
    for(i = 0; i < size; i++)
        printf("%d\t", vector[i]);
    printf("\n");
}

int main(){
    int v[] = {
        1,2,3,4,5
    };

    int size = sizeof(v) / sizeof(int);
    print_vector(v, size);
    inrement_vector(v, size, add);
    print_vector(v, size);
    return 0;
}

Gruß

RedWing
 
Dir ist aber schon klar, dass durch richtiges Softwaredesign solch unübersichtlicher Code zu 99% ohne "Functionpointers" auskommt?!

Mich würde ja mal der konkrete Anwendungsfall interessieren.
 
Falls du C++ verwendest empfehle ich ganz klar Functor-Objekte zu verwenden. Das ganze in ein Template verpackt macht das ganze kompatibel zu allem was operator( ) verwendet:

C++:
template<class Functor>
void iWillCallYouBack(Functior obj)
{
    obj();
}
 
Hallo,
Thomas Kuse hat gesagt.:
Dir ist aber schon klar, dass durch richtiges Softwaredesign solch unübersichtlicher Code zu 99% ohne "Functionpointers" auskommt?!

wenn du damit implizierst das ein Softwaredesign mit Funktionspointern in C einem schlechten Design entspraeche,
muss ich dir wiedersprechen...
Im Linux Kernel Framework wird sehr viel mit Funktionszeigern gearbeitet, und ich finde diese Architektur imho
uebersichtlich und elegant...
C++, keine Frage, kommt man auch ohne Funktionszeiger aus...

Gruß,

RedWing
 
Thomas Kuse hat gesagt.:
Dir ist aber schon klar, dass durch richtiges Softwaredesign solch unübersichtlicher Code zu 99% ohne "Functionpointers" auskommt?!

Mich würde ja mal der konkrete Anwendungsfall interessieren.

Hallo Thomas,

in meinem Fall benoetigte ich den Funktionspointer da ich eine große Klasse von mathematischen Funktionen die ich schon frueher erstellt habe wieder verwenden wollte um damit die Prozedur zu "fuettern".

Natuerlich haette ich das auch ohne jene loesen koennen. Ich finde aber das der Code so um einiges uebersichtlicher ist.

Allerdings bin ich lange kein Experte in Softwaredesign und kenne deshalb auch vielleicht nicht die eleganteste Methode.

Gruß
 
Zurück