Frage zur Codevereinfachung



  • Hab mal eine Anfängerfrage.

    Wenn ich jetzt abfrage ob das Device einen W-Buffer hat kann ich das zwischen Speichern.

    Bei der Verwendung eines W-Buffers mach ich sowas.

    if(W_BUFFER==true)
       UseWBuffer();
    else
       UseZBuffer();
    

    Das ist jetzt nur ein einfaches Beispiel. Aber bei Sachen die ständig abgefragt werden sollte man sowas nicht vereinfachen? Oder macht diese if Abfrage nicht so viel aus? 🙄

    cu 😋



  • if (W_BUFFER)
        [...]
    else
        [...]
    

    Bewirkt das selbe. Denn W_BUFFER ist bereits ein bool'scher Ausdruck.
    Der Compiler dürfte das aber sowieso optimieren. Und diese Abfrage macht wirklich überhaupt nichts aus, da brauchst du keine Bedenken haben.



  • Hi,

    W_BUFFER ? UseWBuffer : UseZBuffer;
    

    Mfg,
    Patrick


  • Mod

    so wie ich den gast verstanden habe, möchte er eine möglichkeit haben einmal zu entscheiden und ab da immer die richtige funktion (passend zum buffer) nutzen, oder?

    das machst du am besten mit klassen 😉

    class CBackBuffer
    .
    .
    .
    

    dazu die zwei varianten

    class CZBuffer : public CBackBuffer
    .
    .
    .
    
    class CWBuffer : public CBackBuffer
    .
    .
    .
    

    irgendwo hast du dann deinen pointer (scope entsprechend, z.b. global)

    CBackBuffer* pBuffer=NULL;
    

    und prüfst bei der initialisierung welche klasse du nutzt.

    if(W_BUFFER) 
      pBuffer=new CWBuffer;
    else 
      pBuffer=new CZBuffer;
    

    ab nun greifst du über den basisklassenpointer immer auf die funktionen der initialisierten klasse zu und mußt dich nicht mehr darum kümmern ob das W oder Z buffer wäre.

    rapso->greets();



  • Patrick schrieb:

    Hi,

    W_BUFFER ? UseWBuffer : UseZBuffer;
    

    Mfg,
    Patrick

    Ich hab es zwar nicht ausprobiert, aber das dürfte nicht funktionieren. Wenn ich mich nicht täusche, kann man mit dem Fragezeichen nur Wertzuweisungen vornehmen und keine Funktionen aufrufen.



  • W_BUFFER ? UseWBuffer() : UseZBuffer(); // oder
    (W_BUFFER ? UseWBuffer : UseZBuffer)();
    

    Ich bin nicht ganz sicher, ob ?: void zurückgeben darf. Das zweite geht aber in jedem Fall, wenn die beiden Use...-Funktionen den gleichen Rückgabetyp haben. Letztlich ist das aber Schwachsinn, weil es mehr oder weniger den gleichen Code erzeugt wie die if..else-Lösung.


Anmelden zum Antworten