Я ищу причудливый способ связать указатели функций и перечисления.
В моем случае у меня есть очередь сообщений, которая содержит идентификатор события и некоторые данные, связанные с событием. несколько простых псевдокодов:
event=(eid, data)
switch(eid) {
case eid1:
handler1(data);
break;
case edi2:
handler2(data);
break;
}
Теперь я хотел бы провести некоторую оптимизацию. Если идентификатор события имеет значение функции, вызываемой внутри оператора регистра переключателя, я могу сохранить декодирование регистра переключателя, сохранив приятную читаемость кода.
event=(eid, data)
eid(data)
Теперь, если я помещаю его в Например, как:
static void abc(void * p) {
}
static void abc2(void * p) {
}
enum eventId {
eid1 = abc,
eid2 = abc2
} xyz;
Мой компилятор говорит:
error: enumerator value for 'eid1' is not an integer constant eid1 = abc
Что абсолютно верно.
Есть идеи, как решить эту проблему?