typedef enum

时间:2010-10-05 07:31:58

标签: c++ enums typedef

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 ++有什么问题?我需要定义一些运算符吗?

2 个答案:

答案 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,所以你可能最好使用普通的命名函数来执行操作,而不是使用一个很容易被意外调用的操作符。