return const reference



  • Hallo!

    Ich habe eine Klasse, die eine Map verwaltet und Zugriffsfunktionen auf diese Map hat; so in der Art:

    class Manager
    {
      const QVariant& value(const QString& key) const
      {
        if(values_.contains(key))
          return values_[key];
    
        // Was soll ich hier zurückgeben?!?
        return ????;
      }
    
    private:
      QMap<QString, QVariant> values_;
    
    };
    

    Wie es schon im Code steht, weiß ich nicht genau was ich in dem Fall zurückgeben soll, wenn in der Funktion Manager::value kein Wert zum übergebenen Key existiert - Mir ist es aber wichtig, dass die Funktion eine const& zurückgibt (Die Klasse ist eigentlich ein bisschen komplizierter und ich möchte Kopien vermeiden. C++11 kann ich vorerst nicht benützen.)

    Gibt es eine elegantere Lösung als ein static const QVariant in der Klasse zu erzeugen und in dem Fall dieses zurückzugeben?

    Falls wir doch mal einen C++11 fähigen Kompilier benützen, wie würde die Lösung dann aussehen, ich nehme an man könnte hier einen Move Konstruktur oder so benützen?

    Lg



  • lass Manager
    {
      const QVariant& value(const QString& key) const
      {
        static QVariant empty;
        if(values_.contains(key))
          return values_[key];
    
        return empty;
      }
    
    private:
      QMap<QString, QVariant> values_;
    
    }
    

  • Mod

    Wie wär's mit einer Exception?



  • Beide Lösungen gefallen mir besser als der static const member der Klasse, danke!!



  • basc_guest schrieb:

    Falls wir doch mal einen C++11 fähigen Kompilier benützen, wie würde die Lösung dann aussehen, ich nehme an man könnte hier einen Move Konstruktur oder so benützen?

    Nein.
    Die Lösung sähe dann genau so aus.


Anmelden zum Antworten