将枚举转换为int

xis*_*xis 11 c++ enums templates casting

我在这段代码上遇到了问题:

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

我打电话的时候

enum {
    SITUATION1,
    STIUATION2
};

int k;
dosth(k,SITUATION1);
Run Code Online (Sandbox Code Playgroud)

编译器(g ++ 4.5)说

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

为什么编译器不会自动将枚举转换为int?

Lig*_*ica 12

您的问题是由于无法从您提供的函数参数中实例化模板.没有隐式转换int时,因为没有要调用的函数在所有.

如果您投射而不是尝试依赖隐式转换,您的程序将起作用:

dosth(k, static_cast<int>(SITUATION1));
Run Code Online (Sandbox Code Playgroud)

或者,如果您显式提供函数模板的参数,那么函数参数将按预期隐式转换,并且您的程序将起作用:

dosth<int>(k, SITUATION1);
Run Code Online (Sandbox Code Playgroud)

  • @ xis19:分开问题; 所有那里都没有隐含的转换.但是,在C++ 03中,[模板参数可能不是未命名的类型](http://www.ideone.com/oyPaB)(`[C++ 03:14.3.1/2]`); 这是[不再是C++ 0x中的情况](http://www.ideone.com/Zsfbo). (2认同)