С++ с использованием функции в качестве параметра

Возможный дубликат:
Как передать функцию в качестве параметра в C?

Предположим, что у меня есть функция, называемая

void funct2(int a) {

}


void funct(int a, (void)(*funct2)(int a)) {

 ;


}

Каков правильный способ вызова этой функции? Что мне нужно настроить, чтобы заставить его работать?

Ответ 1

Обычно для удобства чтения вы используете typedef для определения настраиваемого типа следующим образом:

typedef void (* vFunctionCall)(int args);

при определении этого typedef вам нужен тип возвращаемого аргумента для прототипов функций, на которые вы указываете, чтобы привести идентификатор typedef (в данном случае тип void) и аргументы прототипа, чтобы следовать за ним (в этом случае "int арг" ).

При использовании этого typedef в качестве аргумента для другой функции вы определяете свою функцию следующим образом (этот typedef можно использовать почти так же, как любой другой тип объекта):

void funct(int a, vFunctionCall funct2) { ... }

а затем используется как нормальная функция, например:

funct2(a);

Таким образом, весь пример кода будет выглядеть так:

typedef void (* vFunctionCall)(int args);

void funct(int a, vFunctionCall funct2)
{
   funct2(a);
}

void otherFunct(int a)
{
   printf("%i", a);
}

int main()
{
   funct(2, (vFunctionCall)otherFunct);
   return 0;
}

и будет распечатываться:

2

Ответ 2

Вы хотите:

funct( 42, funct2 );

Ответ 3

проверьте это

typedef void (*funct2)(int a);

void f(int a)
{
    print("some ...\n");
}

void dummy(int a, funct2 a)
{
     a(1);
}

void someOtherMehtod
{
    callback a = f;
    dummy(a)
}