#include #include // 1. 通用函数指针类型集合 typedef void (*Func_RetVoid_ParamVoid)(void); typedef void (*Func_RetVoid_ParamInt32)(int32_t); typedef bool (*Func_RetBool_ParamVoid)(void); typedef bool (*Func_RetBool_ParamInt32)(int32_t); // 2.1 基础控制功能 typedef enum { CTRL_ENTER_AUTO_MODE, // 进入自动模式 CTRL_ENTER_MANUAL_MODE, // 进入手动模式 CTRL_START_MOVE, // 开始运动 CTRL_LANE_CHANGE, // 换道 CTRL_DIR_ADJUST, // 方向调整 CTRL_FUNC_MAX // 基础控制功能数量 } RobotCtrlFuncType; // 2.2 状态检测功能 typedef enum { CHECK_BATTERY, // 检测电池状态 CHECK_SENSOR, // 检测传感器状态 CHECK_COMM, // 检测通信状态 CHECK_FUNC_MAX // 状态检测功能数量 } RobotCheckFuncType; // 3. 通用函数指针载体 typedef void* GenericFuncPtr; // 4. 声明所有业务函数 // 基础控制函数 void AutoDriveMode(void); void ManualDriveMode(void); void StartMove(void); bool LaneChange(int32_t lane_num); bool DirAdjust(void); // 状态检测函数 bool CheckBatteryStatus(void); bool CheckSensorStatus(int32_t sensor_id); void CheckCommStatus(void); // 5. 重构函数向量表结构体:包含多组功能数组 typedef struct { GenericFuncPtr ctrl_funcs[CTRL_FUNC_MAX]; // 基础控制函数数组 GenericFuncPtr check_funcs[CHECK_FUNC_MAX]; // 状态检测函数数组 // 可继续扩展:如 alarm_funcs[ALARM_FUNC_MAX] 告警函数数组 } RobotControlTable; // 6. 定义默认的函数向量表实例(初始化多组数组) const RobotControlTable DEFAULT_ROBOT_TABLE = { // 初始化基础控制函数数组 .ctrl_funcs = { [CTRL_ENTER_AUTO_MODE] = (GenericFuncPtr)(Func_RetVoid_ParamVoid)AutoDriveMode, [CTRL_ENTER_MANUAL_MODE] = (GenericFuncPtr)(Func_RetVoid_ParamVoid)ManualDriveMode, [CTRL_START_MOVE] = (GenericFuncPtr)(Func_RetVoid_ParamVoid)StartMove, [CTRL_LANE_CHANGE] = (GenericFuncPtr)(Func_RetBool_ParamInt32)LaneChange, [CTRL_DIR_ADJUST] = (GenericFuncPtr)(Func_RetBool_ParamVoid)DirAdjust }, // 初始化状态检测函数数组 .check_funcs = { [CHECK_BATTERY] = (GenericFuncPtr)(Func_RetBool_ParamVoid)CheckBatteryStatus, [CHECK_SENSOR] = (GenericFuncPtr)(Func_RetBool_ParamInt32)CheckSensorStatus, [CHECK_COMM] = (GenericFuncPtr)(Func_RetVoid_ParamVoid)CheckCommStatus } }; // 7. 业务逻辑函数:调用多组功能数组的函数 void robot_run(RobotControlTable *table) { if (table == NULL) return; // ========== 调用基础控制函数 ========== ((Func_RetVoid_ParamVoid)table->ctrl_funcs[CTRL_ENTER_AUTO_MODE])(); ((Func_RetVoid_ParamVoid)table->ctrl_funcs[CTRL_START_MOVE])(); if (((Func_RetBool_ParamInt32)table->ctrl_funcs[CTRL_LANE_CHANGE])(1)) { ((Func_RetBool_ParamVoid)table->ctrl_funcs[CTRL_DIR_ADJUST])(); } // ========== 调用状态检测函数 ========== // 检测电池状态 if (((Func_RetBool_ParamVoid)table->check_funcs[CHECK_BATTERY])()) { // 电池正常,检测传感器(传入传感器ID 0) if (((Func_RetBool_ParamInt32)table->check_funcs[CHECK_SENSOR])(0)) { // 传感器正常,检测通信状态 ((Func_RetVoid_ParamVoid)table->check_funcs[CHECK_COMM])(); } } } // 8. 具体函数实现 // 基础控制函数 void AutoDriveMode(void) {} void ManualDriveMode(void) {} void StartMove(void) {} bool LaneChange(int32_t lane_num) { (void)lane_num; return true; } bool DirAdjust(void) { return true; } // 状态检测函数 bool CheckBatteryStatus(void) { return true; } // 电池正常 bool CheckSensorStatus(int32_t sensor_id) { (void)sensor_id; return true; } // 传感器正常 void CheckCommStatus(void) {} // 通信检测逻辑 // 9. 主函数:调用逻辑不变 int main() { robot_run((RobotControlTable*)&DEFAULT_ROBOT_TABLE); return 0; }