C ++使用函数作为参数

时间:2011-06-14 06:44:13

标签: c++

  

可能重复:
  How do you pass a function as a parameter in C?

假设我有一个名为

的函数
void funct2(int a) {

}


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

 ;


}

调用此函数的正确方法是什么?我需要设置什么才能让它工作?

4 个答案:

答案 0 :(得分:19)

通常,为了便于阅读,您可以使用typedef来定义自定义类型,如下所示:

typedef void (* vFunctionCall)(int args);

在定义此typedef时,您希望返回您要指向的函数原型的参数类型, lead typedef标识符(在本例中为void类型)和原型参数< em>关注(在本例中为“int args”)。

当使用此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

答案 1 :(得分:3)

另一种实现方法是使用功能库。

funct2

这里是一个示例,我们将在funct中使用#include <iostream> using namespace std; #include <functional> void funct2(int a) {cout << "hello " << a << endl ;} void funct(int a, function<void (int)> func) {func(a);} int main() { funct(3,funct2); return 0;}

hello 3

输出:{{1}}

答案 2 :(得分:-1)

你想:

funct( 42, funct2 );

答案 3 :(得分:-1)

检查这个

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