Enum
Enum 是一種用文字代替數字 state 的方式。
enum OdomMode {
MOTOR_IMU = 0,
MOTOR_FRONTTW_IMU = 1,
LEFTTW_FRONTTW_IMU = 2,
RIGHTTW_FRONTTW_IMU = 3,
MOTOR_BACKTW_IMU = 4,
LEFTTW_BACKTW_IMU = 5,
RIGHTTW_BACKTW_IMU = 6,
MIDDLETW_IMU = 7,
};
也可以省略等號
// equivalent to the code above
enum OdomMode {
MOTOR_IMU,
MOTOR_FRONTTW_IMU,
LEFTTW_FRONTTW_IMU,
RIGHTTW_FRONTTW_IMU,
MOTOR_BACKTW_IMU,
LEFTTW_BACKTW_IMU,
RIGHTTW_BACKTW_IMU,
MIDDLETW_IMU,
};
OdomMode get_mode() {
return MOTOR_IMU;
}
int main() {
if (get_mode() == OdomMode::MOTOR_IMU) {
printf("Motor imu mode\n");
}
return 0;
}
安全問題
以下會顯示:「Motor imu mode equals to apple」
#include <iostream>
// equivalent to the code above
enum OdomMode {
MOTOR_IMU,
MOTOR_FRONTTW_IMU,
LEFTTW_FRONTTW_IMU,
RIGHTTW_FRONTTW_IMU,
MOTOR_BACKTW_IMU,
LEFTTW_BACKTW_IMU,
RIGHTTW_BACKTW_IMU,
MIDDLETW_IMU,
};
enum Fruit {
APPLE,
BANANA,
};
int main() {
OdomMode mode = MOTOR_IMU;
Fruit fruit = APPLE;
if (mode == fruit) {
printf("Motor imu mode equals to apple\n");
}
return 0;
}
解決方式:Enum class
使用 Enum class 可以有效解決 Enum 混用的問題
#include <iostream>
// equivalent to the code above
enum class OdomMode {
MOTOR_IMU,
MOTOR_FRONTTW_IMU,
LEFTTW_FRONTTW_IMU,
RIGHTTW_FRONTTW_IMU,
MOTOR_BACKTW_IMU,
LEFTTW_BACKTW_IMU,
RIGHTTW_BACKTW_IMU,
MIDDLETW_IMU,
};
enum class Fruit {
APPLE,
BANANA,
};
int main() {
OdomMode mode = OdomMode::MOTOR_IMU;
Fruit fruit = Fruit::APPLE;
if (mode == fruit) { // throws error
printf("Motor imu mode equals to apple\n");
}
return 0;
}
Last updated