将enum强制转换为整型
Doing enum cast to int
这段代码有一个问题:
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; }
};
将启用类型安全。然后使用它来创建类型安全模板。
。
相关文章:
- 是什么导致了这种使用三进制而不是短整型的有符号int到无符号int转换
- 无法在 Arduino 中uint8_t数组转换为无符号长整型数组
- JNI 日期值转换问题,在C++中获取不同的长整型值
- 将整型转换为浮点型时检测溢出
- 是否存在将长整型转换为指针有效的情况
- 如何以优雅高效的方式将无符号/有符号整数/长整型转换为 C 字符串?
- C++:将无符号长整型长整型转换为无符号长整型
- 在 c++ 中将长整型转换为十六进制和二进制
- 初始化时无法将长整型*转换为双精度*
- C++:将无符号长整型转换为矢量<uint8_t>原始数据
- 整型转换为字符数组
- 将长整型转换为结构指针
- c++中的双精度到整型转换
- 将整型转换为双精度
- 无符号整型转换
- 将整型转换字节中的字节更改为整数
- 从整型转换为双精度
- 试图将整型转换为void以按值传递给pthread函数
- 将整型转换为字符串
- 整型转换为字节和反向转换