[C++] Elementfunktion über zwei verschiedene Namen ansprechen

TheNBP

Erfahrenes Mitglied
Hallo,
Ich habe hier ein kleines Problem mit einer Aufgabenstellung für eine Programmier-praktikumsaufgabe an einer Fachhochschule:

Es ist eine Elementfunktion der Klasse random_c vorhanden:

int random_c::getRandVal(void);

Diese soll aber ebenfalls unter dem Namen "zufall" aufrufbar sein. Die Funktionalität ist exakt dieselbe. Fragt nicht wieso und warum das so sein soll *g*

int random_c::zufall(void);
ist also vollkommen gleichwertig zu der oberen Elementfunktion.

Momentan haben ich das so gelöst das ich einfach den Quellcode 1:1 kopiert habe, aber da muss es doch eine elegantere Lösung geben?
 
Da fallen mir ein paar Möglichkeiten ein, wie man das realisieren kann:

1. zufall ruft getRandVal auf und tut sonst nichts. Simpel. Oder, als Variante, bei der beide Funktionen tatsächlich das Selbe tun: Beide rufen eine dritte Funktion auf, in der die eigentliche Arbeit gemacht wird. Sie sind also beide eigentlich nur Wrapper.

2. zufall ist ein Funktionspointer auf getRandVal. Habe allerdings im Moment nicht im Kopf, wie zufall dannn deklariert sein müsste. Eventuell
int ((random_c::*)zufall)(void);. Ist etwas knifflig.

3. #define zufall(x) getRandVal(x)
 
Kachelator hat gesagt.:
2. zufall ist ein Funktionspointer auf getRandVal. Habe allerdings im Moment nicht im Kopf, wie zufall dannn deklariert sein müsste. Eventuell
int ((random_c::*)zufall)(void);. Ist etwas knifflig.

Die Deklaration bzw ein Beispiel könnte so aussehen:

Code:
#include <iostream>

using namespace std;

int add(int a, int b){
        
        return a+b;
}

int main(int argc, char** argv)
{
        int(*pseudo_add)(int, int) = add;
        cout << pseudo_add(5,3) << endl;
}

Gar nicht so knifflig ;)

Gruß

RedWing
 
TheNBP hat gesagt.:
Danke, mit #define zufall getRandVal in der Header Datei funktioniert es.
Bitte. Ist allerdings keine empfehlenswerte Methode, finde ich. Man sollte von Macros die Finger lassen, wann immer es geht. Und hier geht es. Ich finde die Dinger eigentlich nur nützlich, wenn es darum geht, in manchen Routinen den Code etwas knapper zu schreiben, und dann mache ich mir dafür lokale Macros (werden mit #undef wieder entfernt nach Verwendung).
 
Zurück