将enum强制转换为整型

Doing enum cast to int

本文关键字:整型 转换 enum      更新时间:2023-10-16

这段代码有一个问题:

template <typename T>
void dosth(T& value,const T& default_value)
{
   if (condition)
       value = 10;
   else
       value = default_value;
}

当我用

调用
enum {
    SITUATION1,
    STIUATION2
};
int k;
dosth(k,SITUATION1);

编译器(g++ 4.5)说

没有匹配的函数来调用'dosth(int&,)'

为什么编译器不自动将枚举类型强制转换为int类型?

您的问题是由于模板不能从您提供的函数参数实例化。没有隐式转换到int,因为根本没有函数可以调用

如果您强制转换而不是尝试依赖隐式转换,您的程序将工作:

dosth(k, static_cast<int>(SITUATION1));

或者,如果显式地提供函数模板的实参,则函数实参将隐式地如您所期望的那样转换,并且您的程序将正常工作:

dosth<int>(k, SITUATION1);

这对枚举来说会更好吗?

class Situations
{
  private:
    const int value;
    Situations(int value) : value(value) {};
  public:
    static const Situations SITUATION1() { return 1; }
    static const Situations SITUATION2() { return 2; }
    int AsInt() const { return value; }
};

将启用类型安全。然后使用它来创建类型安全模板。