typedef enum{
Adjust_mode_None = 0,
Adjust_mode_H_min,
Adjust_mode_H_max,
Adjust_mode_S_min,
Adjust_mode_S_max,
Adjust_mode_V_min,
Adjust_mode_V_max
}Adjust_mode;
在某些时候我想做:
adjust_mode_ = (adjust_mode_+1)%7;
但是从int到Adjust_mode
的转换无效在其他语言中没问题,C ++有什么问题?我需要定义一些运算符吗?
答案 0 :(得分:5)
使用static_cast
。你需要一个明确的转换。
adjust_mode_ = static_cast<Adjust_mode>(adjust_mode_+1)%7;
答案 1 :(得分:4)
是的,您可以定义一个运算符......
Adjust_mode operator+(Adjust_mode lhs, int rhs)
{
return static_cast<Adjust_mode>(
(static_cast<int>(lhs) + rhs) % 7);
}
Adjust_mode operator+(int lhs, Adjust_mode rhs)
{
return static_cast<Adjust_mode>(
(lhs + static_cast<int>(rhs)) % 7);
}
请注意,您需要允许adjust_mode_ + 1和1 + adjust_mode_才能工作。如果只提供单个函数operator+(Adjust_mode, Adjust_mode)
,那么上面的任何一个表达式都会将枚举转换为int并返回一个int结果。
这非常hackish,所以你可能最好使用普通的命名函数来执行操作,而不是使用一个很容易被意外调用的操作符。