Как мне получить имя enum, связанное с int val.
У меня есть следующий код:
#include<stdio.h>
#include<stdlib.h>
typedef enum _MyID{
id1 = 1,
id2 = 2,
id3 = 3,
}MyID;
MyID get_idname(int id_val)
{
switch(id_val){
case 1:
return id1;
case 2:
return id2;
case 3:
return id3;
default: //checks for invalid ID
return -1;
}
}
int main()
{
int val1 = 1;
int val2 = 2;
MyID new_id1 = (MyID)(val1|val2);
MyID new_id2 = (MyID)(4);
MyID new_id3 = get_idname(3);
MyID new_id4 = get_idname(4);
printf("id is new_id1 %d, new_id2 %d, new_id3 %d, new_id4 %d \n", new_id1, new_id2, new_id3, new_id4);
return 0;
}
Приведенный выше код выводит следующее: id is new_id1 3, new_id2 4, new_id3 3, new_id4 -1
Ясно, приведение типовint to enum опасен.Одним из способов решения этой проблемы является использование функции (как в предыдущем примере) с оператором switch, чтобы перехватить переданное недопустимое значение.Проблема в том, что у меня действительно большое перечисление с сотнями значений, поэтому написание регистра переключателей для каждого перечисления является сложной задачей, а не масштабируемым подходом.Я хотел бы знать, есть ли какое-либо эффективное решение для того же самого.