假设我有一个名为
的函数void funct2(int a) {
}
void funct(int a, (void)(*funct2)(int a)) {
;
}
调用此函数的正确方法是什么?我需要设置什么才能让它工作?
答案 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)
}