johnny: C++: Funktionszeiger als Rückgabewert

Beitrag lesen

#include <stdio.h>

void funktion (char *parameter) {
  printf ("%s", parameter);
}

char *funktion2 (int parameter) {
  static char buf[100];
  snprintf (buf, 99, "%d", parameter);
  return buf;
}

int main (int argc, char **argv) {
  // keine () hinter funktion, sonst wird die direkt aufgerufen
  void (*fkt) (char *) = funktion;
  char *(*fkt2) (int) = funktion2;
  fkt ("Hallo Welt!\n");
  printf ("%s\n", fkt2 (25));
  return 0;
}

  
Also, dein Code hilft mir keineswegs weiter.  
Du hast 2 funktionen und in der main speicherst du die Adressen der 2 Funktionen in Funktionszeigern. Danach rufst du beide Funktionen auf und beendest das Programm.  
  
Ich habe eine Funktion holeZeiger die 2 Parameter erwartet und viele andere Funktionen die einen Zeiger auf eine Klasseninstanz erwarten:  
  
~~~c++
  
void Funktion1(KlasseA* klassea)  
{  
 klassea->MachIrgendwasNurKeinenBloedsinn();  
}  
  
void Funktion2(KlasseA* klassea)  
{  
 klassea->MachIrgendwasAnderesNurKeinenBloedsinn(true);  
}  
  
[void] holeZeiger(const char* uri, const char* host)  
{  
 if(strcmp(uri, "/") == 0 && strcmp(host, "forum.de.selfhtml.org") == 0) {  
  return Funktion1;  
 } else if(strcmp(uri, "/lol") == 0 || strcmp(uri, "/") == 0 && strcmp(host, "de.selfhtml.org") == 0) {  
  return Funktion2;  
 } // viele weitere else if und am Schluss ein else.  
}  
  
void handler(void)  
{  
 // Folgende Zeile soll so richtig sein. Was heisst das der Rückgabewert der Funktion holeZeiger([void]) noch angepasst werden muss.  
 void (*fkt) (char *) = holeZeiger("/", "forum.de.selfhtml.org");  
 *fkt();  
}  
  

Die Funktion hat in meinen Augen durchaus Ihre Daseinsberechtigung. Sie 'wählt' zwischen verschiedenen Funktionen anhand den Parametern aus und gibt die korrekte Funktion zurück. Die wird dann aufgerufen und erledigt die Arbeit. Jede Funktion macht dabei ähnliches allerdings für einen anderen Bereich.

PS: Warum postest Du eigentlich unter zwei verschiedenen Nicknames? In Deinem anderen Thread hießt Du noch "johnny". Ferner: Was ist aus Deinem Problem in dem Thread denn überhaupt geworden?

Ich vermute mal Ihr wart während der 'langen' Pause nicht untätig und habt neue(verbesserte?) Kontrollen(-möglichkeiten) eingebaut?!
Sonst kann ich mir nicht erklären wie du da drauf gekommen bist.
Ok, ich bekenne mich als Schuldiger Sündner. Ist das überhaupt ein Regelverstoss?
Muss ich gleich mal nachschauen ... Hoffentlich kein Schlimmer ...
Mein anderes Problem habe ich ähnlich deinem Beispiel gelöst und bin recht zufrieden damit. Vielen Dank!

Johanna alias johnny?!