c++ 回调函数

假设定义: 

// 定义飞行控制命令结构体
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;
}

示例解释

  1. 定义和声明

    • 首先定义了 FlyControlCmd 结构体,表示飞行控制命令的结构。
    • 使用 typedef 定义了 P_CALL_BACK_FLY_CTRL 类型,它是一个指向返回类型为 bool,参数类型为 const FlyControlCmd& 的函数指针类型。
  2. flightControl 函数

    • flightControl 函数接受一个 P_CALL_BACK_FLY_CTRL 类型的参数 callback,这个参数是一个函数指针,用于处理飞行控制命令。
    • 在函数内部,创建一个 FlyControlCmd 类型的对象 cmd,表示一个飞行控制命令。
    • 调用传递进来的 callback 回调函数,并传递 cmd 作为参数,获取处理结果。
  3. handleFlightControl 函数

    • handleFlightControl 函数是一个示例的回调函数,它被传递给 flightControl 函数作为参数。
    • flightControl 函数调用 callback(cmd) 时,实际上会执行 handleFlightControl(cmd)
  4. main 函数

    • main 函数中,调用 flightControl(handleFlightControl),将 handleFlightControl 作为回调函数传递给 flightControl
    • flightControl 内部会调用 handleFlightControl 处理飞行控制命令,并根据返回值输出不同的信息

总结

回调函数允许将一个函数作为参数传递给另一个函数,使得后者可以在适当的时候调用前者来完成特定的逻辑处理。在示例中,handleFlightControl 函数作为回调函数被 flightControl 函数调用来处理飞行控制命令,并根据处理结果进行输出。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值