Was ist die Kosten für die Verwendung eines Zeiger auf member-Funktion im Vergleich zu einem Schalter?

Ich habe die folgende situation:


class A
{
public:
    A(int whichFoo);
    int foo1();
    int foo2();
    int foo3();
    int callFoo(); //cals one of the foo's depending on the value of whichFoo
};

In meiner aktuellen Implementierung, die ich speichern Sie den Wert von whichFoo in ein Daten-member im Konstruktor, und verwenden Sie ein switch im callFoo() zu entscheiden, welche von den foo ' s zu nennen. Alternativ kann ich mit einem switch im Konstruktor speichern einen Zeiger auf die richtige fooN() genannt zu werden, in callFoo().

Meine Frage ist, welcher Weg ist effektiver, wenn ein Objekt der Klasse A wird nur einmal gebaut, während callFoo() heißt eine sehr große Anzahl von Zeiten. Also im ersten Fall haben wir mehrere Ausführungen einer switch-Anweisung, während in der zweiten gibt es nur einen Schalter, und mehrere Anrufe von eine member-Funktion mit dem Zeiger darauf. Ich weiß, dass der Aufruf einer member-Funktion mit einem Zeiger langsamer ist, als nur ruft es direkt. Weiß jemand, ob dieser Aufwand ist mehr oder weniger als die Kosten für eine switch?

Klarstellung: ich weiß, dass Sie nie wirklich wissen, welche Ansatz bietet eine bessere Leistung, bis Sie es versuchen und Zeit. In diesem Fall ist aber ich habe schon Ansatz 1 umgesetzt, und ich wollte herausfinden, ob Ansatz 2 kann es effizienter sein, zumindest im Prinzip. Es scheint, dass es sein kann, und jetzt macht es Sinn für mich, zu stören, um es zu implementieren, und versuchen Sie es.

Oh, und ich mag auch Ansatz 2 besser aus ästhetischen Gründen. Ich denke, ich bin auf der Suche nach einer Rechtfertigung, um es zu implementieren. 🙂

InformationsquelleAutor Dima | 2008-09-22
Schreibe einen Kommentar