2015-12-05 10 views
6

Ich möchte die folgende einfache Funktion aufrufen die Funktion, die es aufgerufen hat, aber die Funktion wird von mehreren Funktionen aufgerufen, so dass es erkennen muss, welche Funktion es heißt und dann aufrufen.Wie bekomme ich eine Funktion, um die Funktion aufzurufen, die sie aufgerufen hat?

Als eine Folge, ist das die Art von Funktion, die besser als eine Lücke ausgedrückt würde?

+3

Es gibt keine Standardmethode, um zu bestimmen, welche Funktion Sie aufgerufen hat. Vielleicht hat Ihre Umgebung eine Möglichkeit, den aktuellen Aufruf-Stack zu erhalten, aber das wäre wiederum nicht standardgemäß. – PaulMcKenzie

+0

Im Allgemeinen möchten Sie das nicht tun. Sie können in einer rekursiven Schleife enden. Welches Problem versuchen Sie eigentlich zu lösen? –

+0

Ich versuche, einen einfachen Test zu schreiben - wie ein Test, den der Benutzer nimmt. Jedesmal, wenn sie falsch antworten, möchte ich, dass diese Funktion aufgerufen wird, aber anstatt einfach zurück zu main zu gehen und somit die nächste Frage zu lesen, möchte ich, dass sie auf die Frage zurückgeht, die der Benutzer falsch verstanden hat. – ticklemyiguana

Antwort

3

Was Sie wollen, ist ein Rückruf. Rückrufe werden, wie dies in C++ implementiert:

typedef int (*CallbackType)(char c); 

int wrong(CallbackType callback) 
{ 
    std::cout << "WRONG \n"; 
    int r = callback('x'); 
    return r; 
} 

int also_wrong(char c) 
{ 
    return wrong(also_wrong); 
} 

Natürlich ist dies in runaway Rekursion zur Folge haben wird, so wird es Sie in eine Menge Ärger bekommen, aber es beantwortet auf jeden Fall Ihre Frage.

Und ja, wenn es nur 0 zurückgibt, dann ist dies die Art von Funktion, die besser ausgedrückt würde als void zurückgeben.

+0

Interessant. Es gibt ein paar Dinge, die ich noch nicht kenne - ich bin ziemlich neu in C++ und Programmierung im Allgemeinen, aber ich werde das Zeug sehen. – ticklemyiguana

+1

Dies ist nicht die beste Lösung für OP-Problem –

+1

Der OP könnte auch Probleme mit seiner Hypothek haben. Wir sind dafür nicht verantwortlich. Er hat eine Frage gestellt, ich habe genau das geantwortet, ich bin sogar so weit gegangen, eine Warnung einzutragen, was passieren wird, wenn er die Antwort verwendet. Ich denke, ich habe ihn bedeckt. –

Verwandte Themen