我是C ++的新手。仍然试图围绕回调如何在这种语言中运作。
我有点理解指针函数,但我不知道它是如何工作的。
#include <iostream>
int add(int x, int y){
return x+y;
}
int subtract(int x, int y){
return x-y;
}
typedef int(*t_yetAnotherFunc)(int,int);
t_yetAnotherFunc doMoreMath(char op){
if(op == '+')
return add; // equivalent of add(x,y), where x and y are passed from the function calling doMoreMath()?
else if(op == '-')
return subtract;
}
int main(){
int x = 2;
int y = 22;
t_yetAnotherFunc yetAnotherFunc= doMoreMath('+');
int yetAnotherFuncOutput= yetAnotherFunc(x,y);
std::cout << yetAnotherFuncOutput << '\n';
return 0;
}
x
和y
如何从yetAnotherFuncOutput
转到yetAnotherFunc
?
或者另一种询问方式:没有typedef
会是什么样子?
答案 0 :(得分:3)
指向函数的指针可以像任何其他函数一样使用,当你调用它时,你得到的结果就像调用任何其他函数一样。它就像是另一个函数的别名。
在您的情况下,您创建add
函数的别名,当您致电yetAnotherFunc
时,您实际上正在调用add
。
声明
int yetAnotherFuncOutput= yetAnotherFunc(x,y);
相当于
int yetAnotherFuncOutput= add(x,y);
答案 1 :(得分:1)
让我们从typedef int(*t_yetAnotherFunc)(int,int)
t_yetAnotherFunc
是一种类型,可以指向一个方法,该方法将两个int
作为结果并返回int
。
t_yetAnotherFunc doMoreMath(char op)
方法会根据add
返回subtract
或char op
。返回语句中的add
和subtract
必须被视为那些方法的地址而不是函数调用。
t_yetAnotherFunc yetAnotherFuncc = doMoreMath('+');
根据t_yetAnotherFunc
的定义,现在yetAnotherFuncc
可以指向add
方法。
如果需要使用其指针(此处为add
)调用具有参数(int x, int y)
的函数(此处为yetAnotherFuncc
),则需要通过其指针{{1}来提供其参数}}。这是通过以下线完成的。
yetAnotherFuncc(x, y)
它使用参数int yetAnotherFuncOutput = yetAnotherFunc(x,y);
(2)和add
(22)调用函数x
,y
的返回值存储在{{1}中}}
如果没有add
,它将是一个复杂的定义,如下所示
yetAnotherFuncOutput