hardcoded...
-
hi,
ich hab einen quelltext, der ist im moment ziemlich hardcoded
if(strcmp(cBuffer, "Test1") == 0) { funktion1(); } if(strcmp(cBuffer, "Test2") == 0) { function2(); } if(strcmp(cBuffer, "Test3") == 0) { function3(); }
jemand ne idee das ganze eleganter zu loesen? die stringcompares koennte man ja einfach in einer schleife durchlaufen lassen, aber wie koennte man die funktionsaufrufe handhaben?
fuer ideen dankbar
-
typedef void (*TestFunction) (); // Initialisierung TestFunction functions [3]; functions[0] = function1; functions[1] = function2; functions[2] = functions3; // Auswertung int index = cBuffer[4]-'0'-1; functions[index]();
MfG SideWinder
-
hatte ich auch schon uberlegt, aber dachte dass es nicht klappen wuerde...
thx
-
struct E { const char* msg; void(*func)(); } table[] = { {"eins", func1}, {"zwei", func2}, ... {0,0} }; for(E* e=table; e->msg; ++e) if(strcmp(buf, e->msg)==0) e->func();
// edit: viel zu langsam
wenn die strings immer in dem format sind, ist natürlich sidewinders version ohne strcmp vorzuziehen
-
#include <stdio.h> void hallo(); void main() { struct { void (*func)(); } array[] = { hallo() }; array[0].func; } void hallo() { printf("hallo"); }
(15) : error C2440: 'initializing' : 'void' kann nicht in 'void (__cdecl *)(void)' konvertiert werden
Ausdruck vom Typ void kann nicht in andere Typen konvertiert werdeninwiefern muss ich jetzt casten oder ander typen benutzen, ich kann damit nicht so recht was anfangen...
-
hallo()
im struct in hallo umändern.und dann so aufrufen:
array[0].func();
-
thx, alles bestens