由于c ++底层类型的c ++枚举应该是int。
但是有代码
enum class Properties{ first , second }
void tmp ( int i ) {}
tmp( Properties::first )
编译器抱怨Properties ::首先不是int而是属性类型。
我是否真的必须将其强制转换为int才能将枚举值传递给函数或是否有解决方法?
感谢您的帮助。
答案 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为您提供所需的访问权限,同时保留隐式转换。