[] Operator mit string überladen?



  • hallo,

    ist es möglich, den [] Operator mit einem string zu überlagern ?

    mit dem folgenden Codestück funktioniert es nicht ("invalid types ‘Dictionary<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >*[const char [6]]’ for array subscript")

    template<typename T>
    T Dictionary<T>::operator[](std::string){
      return get_value(key);
    }
    

    Mach ich etwas falsch, aber ich fürchte string ist einfach nicht möglich?

    mfg



  • String ist möglich.
    Ich sehe in deinem Codestück allerdings auch keinen Fehler, aber der Fehlermeldung zufolge, kann es sein, dass du den [] Operator auf einen Pointer anwendest, anstatt auf das Objekt?



  • jup, dass ist so !
    kann man [] nur auf Objekte anwenden?



  • es gibt auch einen operator [] für zeiger, nur den kannst du nicht überladen.

    T* x;
    x[10] = T();
    //hat dieselbe bedeutung wie
    *(x + 10) = T();
    //und ist "nur" die kurzform
    


  • Ich vermute mal das du sowas machen willst

    A *a;
    a["aaa"];
    

    Das wird nicht funkionieren, da der []-Operator hier Zeigerarithmetik macht, was man nicht ueberladen kann. Vielleicht willst du aber sowas.

    A *a;
    (*a)["aaa"];
    


  • Zeig doch bitte mal, wie du den Operator aufrufst.

    Ist es eigentlich Absicht, dass der Parameter keinen Namen hat (wenn ja, was ist key )? Und Klassen wie std::string solltest du besser als Const-Referenz übergeben.


Anmelden zum Antworten