leicht unterschiedliche Funktionen

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
win8789
Beiträge: 25
Registriert: So Mai 29, 2016 12:27 pm

leicht unterschiedliche Funktionen

Beitrag von win8789 » Sa Aug 27, 2016 2:27 pm

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.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8860
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: leicht unterschiedliche Funktionen

Beitrag von Xin » So Aug 28, 2016 7:37 am

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 ist eine Möglichkeit.
win8789 hat geschrieben:Die Frage die mich mir dabei stelle ist: Wie gut ist diese herangehungsweise und gibt es besser Alternativen?
Das Bool sollte aber semantisch passen. Heißt: Wenn die Funktion in beiden Fällen die gleiche Funktion mit marginalem Unterschied macht.
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.

Benutzeravatar
Necip
Beiträge: 122
Registriert: Do Nov 17, 2011 12:03 pm
Kontaktdaten:

Re: leicht unterschiedliche Funktionen

Beitrag von Necip » Mo Okt 10, 2016 9:57 pm

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();
  }


Antworten