Hallo,
in letzter Zeit passiert es öfters, dass ich zwei Funktioen erstelle, welche sich nur leicht in sehr wenigen Details unterscheiden.
Wenn das passiert, wende ich meistens eine bool mit einem Default-Value am, um letztendich nur eine Funktion zu haben (die Details befinden sich in einer if-Bedungung (deshalb der bool)).
Die Frage die mich mir dabei stelle ist: Wie gut ist diese herangehungsweise und gibt es besser Alternativen?
ps. Ich rede hierbei nicht von unterschiedliche Datentypen, wo man einfach ein Template verwenden könnte.
pps. mir ist bewusst, dass man mit Templates auch viel, viel mehr anstellen kann als einfach nur Datentypen "beliebig" zu machen.
leicht unterschiedliche Funktionen
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: leicht unterschiedliche Funktionen
Das ist eine Möglichkeit.win8789 hat geschrieben:Hallo,
in letzter Zeit passiert es öfters, dass ich zwei Funktioen erstelle, welche sich nur leicht in sehr wenigen Details unterscheiden.
Wenn das passiert, wende ich meistens eine bool mit einem Default-Value am, um letztendich nur eine Funktion zu haben (die Details befinden sich in einer if-Bedungung (deshalb der bool)).
Das Bool sollte aber semantisch passen. Heißt: Wenn die Funktion in beiden Fällen die gleiche Funktion mit marginalem Unterschied macht.win8789 hat geschrieben:Die Frage die mich mir dabei stelle ist: Wie gut ist diese herangehungsweise und gibt es besser Alternativen?
Schreibt man eine größere Funktion (oder braucht die Performanz), kann man die Unterschiede auch in ein Trait auslagern und die Funktion als Template ausführen, das sich die Unterschiede aus dem Trait beschafft. Der Vorteil ist hier, dass die Sachen auskompiliert werden, also nicht mehr zur Laufzeit abgefragt werden und das Bool täuscht keine semantische Ähnlichkeit mehr vor, die eventuell gar nicht besteht, wenn eine Funktion zwar einen ähnlichen Algorithmus, aber eine ganze andere Funktion beherbergt.
Das Bool wandert damit an das template.
myfunc< OptionA >( int a, int b );
bzw.
myfunc< Optionb >( int a, int b );
und so kann es natürlich beliebig viele Optionen geben.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Re: leicht unterschiedliche Funktionen
Hast Du dich schon einmal mit virtuellen Funktionen beschäftigt?
Code: Alles auswählen
class Base {
int exec(void) {
// Gemeinsame Funktion
fn (); // Spezielle Funktion
}
virtual int fn(void) = 0; // reine virtuelle Funktion
}
class FunctionA : public Base {
virtual int fn (void) {
// Spezialbehandlung
return 1;
}
}
class FunctionB : public Base {
virtual int fn (void) {
// Spezialbehandlung
return 0;
}
}
main () {
FunktionA a;
FunktionB b;
a.exec();
b.exec();
}