假设定义:
// 定义飞行控制命令结构体
struct FlyControlCmd {
int command; // 控制命令
double value; // 控制值
};
// 定义回调函数类型 P_CALL_BACK_FLY_CTRL
typedef bool (* P_CALL_BACK_FLY_CTRL) (const FlyControlCmd&);
现在我们将创建一个函数,它接受一个 P_CALL_BACK_FLY_CTRL
类型的参数作为回调函数,并且在特定情况下调用这个回调函数。
#include <iostream>
// 定义回调函数类型 P_CALL_BACK_FLY_CTRL
typedef bool (* P_CALL_BACK_FLY_CTRL) (const FlyControlCmd&);
// 模拟飞行控制函数,接受一个回调函数作为参数
void flightControl(P_CALL_BACK_FLY_CTRL callback) {
// 创建一个飞行控制命令
FlyControlCmd cmd = {1, 10.5}; // 示例控制命令为1,值为10.5
// 调用回调函数,并传递飞行控制命令
bool result = callback(cmd);
// 根据回调函数的返回值进行后续处理
if (result) {
std::cout << "飞行控制成功处理命令。\n";
} else {
std::cout << "飞行控制未能成功处理命令。\n";
}
}
// 示例回调函数:打印接收到的飞行控制命令,并返回 true 表示成功处理
bool handleFlightControl(const FlyControlCmd& cmd) {
std::cout << "接收到飞行控制命令:command=" << cmd.command << ", value=" << cmd.value << "\n";
// 这里可以根据具体逻辑处理飞行控制命令
return true;
}
int main() {
// 调用 flightControl 函数,并传递 handleFlightControl 作为回调函数
flightControl(handleFlightControl);
return 0;
}
示例解释
-
定义和声明:
- 首先定义了
FlyControlCmd
结构体,表示飞行控制命令的结构。 - 使用
typedef
定义了P_CALL_BACK_FLY_CTRL
类型,它是一个指向返回类型为bool
,参数类型为const FlyControlCmd&
的函数指针类型。
- 首先定义了
-
flightControl 函数:
flightControl
函数接受一个P_CALL_BACK_FLY_CTRL
类型的参数callback
,这个参数是一个函数指针,用于处理飞行控制命令。- 在函数内部,创建一个
FlyControlCmd
类型的对象cmd
,表示一个飞行控制命令。 - 调用传递进来的
callback
回调函数,并传递cmd
作为参数,获取处理结果。
-
handleFlightControl 函数:
handleFlightControl
函数是一个示例的回调函数,它被传递给flightControl
函数作为参数。- 当
flightControl
函数调用callback(cmd)
时,实际上会执行handleFlightControl(cmd)
。
-
main 函数:
- 在
main
函数中,调用flightControl(handleFlightControl)
,将handleFlightControl
作为回调函数传递给flightControl
。 flightControl
内部会调用handleFlightControl
处理飞行控制命令,并根据返回值输出不同的信息。
- 在
总结
回调函数允许将一个函数作为参数传递给另一个函数,使得后者可以在适当的时候调用前者来完成特定的逻辑处理。在示例中,handleFlightControl
函数作为回调函数被 flightControl
函数调用来处理飞行控制命令,并根据处理结果进行输出。