枚举值的类型不是int?

时间:2017-11-26 21:22:01

标签: c++ c++11 enums

由于c ++底层类型的c ++枚举应该是int。

但是有代码

enum class Properties{ first , second }
void tmp ( int i ) {}

tmp( Properties::first )

编译器抱怨Properties ::首先不是int而是属性类型。

我是否真的必须将其强制转换为int才能将枚举值传递给函数或是否有解决方法?

感谢您的帮助。

1 个答案:

答案 0 :(得分:7)

const response = {"id1-field1":true,"id1-field2":0,"id1-field3":3,"id2-field1":false,"id2-field2":1,"id2-field3":0,"id3-field1":false,"id3-field2":0,"id3-field3":0}; const result = [...Object.keys(response) .reduce((m, key) => { const [id, field] = key.split('-'); const item = m.get(id) || { id }; item[field] = response[key]; return m.set(id, item); }, new Map()).values()]; console.log(result);范围的枚举类型。这是因为您在定义时使用了Properties关键字。范围内的枚举不能隐式转换为它们的基础类型(或者任何整数类型)。这是设计的。

如果你想要融合,只需将它作为无范围的枚举:

class

还有使用命名空间的妥协:

enum Properties{ first , second };

这将通过完全限定的id为您提供所需的访问权限,同时保留隐式转换。