operator [] Überladung



  • OK, an den Rückgabetypen hab' ich nicht gedacht.

    In C++11 sollte es kein Problem sein, weil man -> auto& verwenden kann.

    auto operator[](size_t i) -> auto&
         { 
         	return val[i];
         }
    

    In C++03 müsste man die Funktion auf z.B. Container die T::value_type definieren einschränken:

    typename T::value_type operator[](size_t i)
         { 
         	return val[i];
         }
    

    Wobei der aktuell von ideone für C++14 verwendete Compiler hier der Meinung ist die Funktion sofort instanzieren zu müssen, was dann natürlich für Typen wie int bei T::value_type kracht.

    prog.cpp: In instantiation of 'struct S<int>':
    prog.cpp:25:15:   required from here
    prog.cpp:15:29: error: 'int' is not a class, struct, or union type
          typename T::value_type operator[](size_t i)
    

    Sollte das nicht explizit über SFINAE erlaubt sein?
    So lange operator [] nirgends verwendet wird, besteht ja keine Notwendigkeit dass T::value_type was sinnvolles ergibt oder auch nur existiert.

    Oder hab' ich da was falsch verstanden/falsch in Erinnerung?

    EDIT: Da mein Beitrag hier ne neue Seite angefangen hat...
    Furble Wurble hat die Erklärung gefunden - die Aufgabe mit operator [] war schlicht ein Fehler: https://www.c-plusplus.net/forum/p2443845#2443845



  • Hallo Leutz,
    Danke Furble Wurble dann kann ich die Aufgabe ja getrost auslassen.
    Ich wusste gar nicht das es so etwas wie eine Korrektur für das Buch gibt.
    Leider kann ich auch kein Englisch, so das ich mich auf der Seite belesen könnte aber ich werde mir die Seite für spätere Eventualitäten abspeichern.

    Danke auch allen anderen Helferlein.

    Ich werd dann mal weiter machen.
    Lust verlieren ist nicht eher mach ich ne Pause und lass sacken.
    Ich hab hier 4 Bücher zu liegen aber manchmal fehlt einen dann doch die Möglichkeit mit einen darüber zu reden wenn man nicht weiter kommt.

    Bis auf ein nächstes mal nun hol ich erst mal nen Eisbecher 😃 😃

    Guido



  • utass schrieb:

    aber manchmal fehlt einen dann doch die Möglichkeit mit einen darüber zu reden wenn man nicht weiter kommt.

    Rettet dem Dativ! 😉


Anmelden zum Antworten