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)