Funktionsnamen beim Aufruf aus String lesen
-
In dem Ausgangsproblem bietet sich sogar eine sehr simple Hashtabelle an.
#include <stdio.h> typedef void (*fpointer_t)(void); typedef size_t hash_t; void Func1(void) { puts("eins"); } void Func2(void) { puts("zwei"); } hash_t hash(char *s) { return s[4] - '0' - 1; } fpointer_t lookup(fpointer_t *array, size_t size, char *name) { hash_t h = hash(name); return h < size ? array[h] : NULL; } int main(void) { fpointer_t array[] = {Func1, Func2}; lookup(array, sizeof array, "Func1")(); lookup(array, sizeof array, "Func2")(); return 0; }
Ich nehm für sowas als erstes immer einen Suchbaum, weil ich den fertig herumliegen hab, und man daran kaum was ändern oder gar nachdenken muss. Über ein elegantes Hashing denke ich (faul wie ich bin) erst nach, sobald der Baum zu langsam ist.