Seite 1 von 1

variabler Funktionsaufruf

Verfasst: Mo Dez 10, 2012 4:10 pm
von duke
Hallo liebe Community,
ich habe ein Programm, was je nach int Variablen eine Funktion ausführen soll. habe das problem bisher mit switch gelöst. muss dafür aber immer neuen case erstellen und funktionsaufruf schreiben. möchte das es kürzer geht, damit es bei mehreren hundert funktionen nicht zu unübersichtlich wird.
gibt es eine möglichkeit mit der ich eine funktion mit hilfe einer variablen im namen aufrufen kann?
vielen dank für eure hilfe.

Bsp:

Code: Alles auswählen

int i;
void do_1() {...}
void do_2() {...}

switch i
{ case 1: do_1();
break;
case 2: do_2();
break;
}
freue mich über eure Vorschläge.

Edit by cloidnerux: Code tags

Re: variabler Funktionsaufruf

Verfasst: Mo Dez 10, 2012 4:15 pm
von cloidnerux
Es gibt keiner mir bekannte Möglichkeit irgendwelche Pattern(Muster) für Funktionsaufrufe festzulegen, sodass man irgendwie per

Code: Alles auswählen

do_$i();
iwas ausführen kann.
Was funktionieren würde, wäre entweder alle Funktionen in einer Liste mit Funktionspointern(Pointer auf Funktionen, die man wie Funktionen verwenden kann) zu schmeißen und dann durch die Liste zu iterieren.
Du könntest dir aber auch ein Script schreiben, dass dir Code generiert und da deine Funktionen hochzählt.
Es wäre aber auch möglich OOP zu verwenden und alle Funktionen in Klassen kapseln, die alle von der selben Erben und eine entsprechende Funktion besitzen, dann musst du aber immer noch deine 100 verschiedenen Objekte anlegen.

Re: variabler Funktionsaufruf

Verfasst: Mo Dez 10, 2012 4:55 pm
von duke
danke dir cloidnerux.
für mich kommt dann nur die Liste mit den Funktionszeigern in Betracht.

eine funktion wie eval("funktion()") gibt es in c wohl nicht oder?

Re: variabler Funktionsaufruf

Verfasst: Mo Dez 10, 2012 5:09 pm
von cloidnerux
eine funktion wie eval("funktion()") gibt es in c wohl nicht oder?
Nein. C ist eine Compilierende Sprache, daher alle Informationen müssen zum Zeitpunkt des Kompilierens feststehen und eindeutig sein. Funktionen wie eval funktionieren nur in interpretierenden Sprachen, die zur Laufzeit alle vorhandenen Informationen nach diesem Suchtext durchsuchen können und dann dementsprechend ausführt. Dein Compiler kann das nicht.
für mich kommt dann nur die Liste mit den Funktionszeigern in Betracht.
Hierbei musst du aber beachten, dass alle Funktionsköpfe gleich sein müssen.
Von daher stellt sich mir die Frage, ob du da nicht dein Konzept ändern kannst, und die hudnerte Funktionen zusammenlegen kannst, je nach dem was du da überhaupt berechnen willst.

Re: variabler Funktionsaufruf

Verfasst: Di Dez 11, 2012 3:12 pm
von Xin
duke hat geschrieben:Hallo liebe Community,
ich habe ein Programm, was je nach int Variablen eine Funktion ausführen soll. habe das problem bisher mit switch gelöst. muss dafür aber immer neuen case erstellen und funktionsaufruf schreiben. möchte das es kürzer geht, damit es bei mehreren hundert funktionen nicht zu unübersichtlich wird.
gibt es eine möglichkeit mit der ich eine funktion mit hilfe einer variablen im namen aufrufen kann?
Ich weiß noch nicht, was Du da tun willst, aber kann es sein, dass Du objektorientiert arbeiten möchtest?

Du kennzeichnest ein handelndes Objekt mit einem Identifier - dem Integer - und rufst eine Funktion, die anhand des Identifiers mal so oder mal so handeln soll.

Code: Alles auswählen

class Base
{
  public:
    virtual void do() = 0;
};

class do_1 : public base
{
  public:
     void do() { printf( "do_1\n" ); }
};

class do_2 : public base
{
  public:
     void do() { printf( "do_2\n" ); }
};

void main()
{
  Base * b = new do_1;

  // b ist Base, alles was wir wisssen ist, dass man damit was do'en kann:
  b->do();  // der Aufruf ruft je nach Objekt (es ist ein do_1-Objekt) die richtige do-Funktion.
};