templates - operatoren überladen



  • template <typename T>
    T operator[] (unsigned int pos)
    {
       if((pos < 0)||(pos > SIZE))
           throw InterprocessException("::Access Violation", __FILE__, __LINE__);
    
       return reinterpret_cast<T*>(lpv_Highmap_Ptr)[pos];
    }
    
    aufruf:
    cout << "Parameter1: " << (f.operator[]<float>(2)) << endl;
    

    das haut ja die ganze syntax zusammen...;-( wie löst man das denn schöner?

    cu



  • f[2] ? Was ist f?



  • in solchen fällen ist die benutzung eines operator[] relativ sinnlos, da es die übersicht nicht erhöht(was ein operator imho tun sollte).

    f.getElement<float>(2);
    

    das ist imho schöner.



  • hmm, dass sieht so ein wenig merkwürdig aus, so ohne Kontext.

    warum ein Template []-Operator? Vorallem warum mapst du dann die Adressierung nach diesem Template Typ?

    Ansonsten
    1. Nimm size_t als Parameter für den []-Operator
    2. Ist es in C++ unüblich den []-Operator mit Access-Check zu implementieren, da würde ich lieber eine assert-Art nehmen und eine at-Funktion einbauen



  • Von welchem Typ sind denn die Elemente in lpv_Highmap_Ptr? Diesen Typ solltest du auch als Rückgabetyp verwenden. Dann fällt auch dieser blöde Cast weg.

    Einen op[] implementiert man zudem üblicherweise mit Referenz Rückgaben, sonst wären ja solche Anweisungen

    f[2] = 0;
    

    vollkommen sinnlos. Und wenn nur lesender Zugriff erlaubt ist, dann mach den op sowie Rückgabewert const.
    Und kannst du mir noch verraten wie sowas
    [cpp]if((pos < 0)||(pos > SIZE))[/cpp]
    bei einem unsigned Typ möglich wird?
    Zudem sollte pos == SIZE ebenfalls ein Fehler sein.



  • was hälst du denn von

    float f;
    f.getElement(42, f);
    

    ?



  • Wat? Wusste gar nicht, dass float 'ne Memberfunktion getElement hat. 🙄



  • War ein Tippfehler. 🤡

    Das zweite f sollte für fileMapping stehen.


Anmelden zum Antworten