Anmutiger Umgang mit Duplikat-, Const- und Non-Const-Gettern
Als Programmierer stoßen wir oft auf das Problem, sowohl Const als auch Non-Const zu haben -const-Versionen von Getter-Methoden in unseren Klassen. Während die separate Implementierung zu Codeduplizierung führen kann, kann es eine Herausforderung sein, eine elegante Lösung für dieses Rätsel zu finden.
Die Herausforderung
Im bereitgestellten Beispiel benötigt die Klasse Foobar zwei getSomething()-Methoden: eine nicht konstante (Something& getSomething(int index)) und eine konstante (const Something& getSomething(int index) const). Der Versuch, diese Methoden mit den anderen zu implementieren, führt jedoch unweigerlich zu Compilerfehlern. Das Umwandeln der Nicht-Const-Version aus der Const-Version ist ebenfalls ein notwendiges Übel.
Die elegante Lösung
Obwohl eine absolut makellose Lösung möglicherweise nicht machbar ist, ist dies am häufigsten der Fall Der empfohlene Ansatz besteht darin, die Konstante von der anderen Funktion zu entfernen. Obwohl es nicht gerade ästhetisch ansprechend ist, ist es eine sichere Technik, da die aufrufende Mitgliedsfunktion nicht konstant ist, was bedeutet, dass das Objekt selbst nicht konstant ist und das Wegwerfen der Konstante zulässig ist.
Betrachten Sie den folgenden Codeausschnitt als Beispiel:
class Foo { public: const int& get() const { // non-trivial work return foo; } int& get() { return const_cast<int&>(const_cast<const Foo*>(this)->get()); } };
In diesem Beispiel verwirft die Nicht-Const-Version von get() die Const aus der Const-Version, sodass sie das Objekt ändern kann selbst.
Das obige ist der detaillierte Inhalt vonWie können wir doppelte Const- und Non-Const-Getter-Methoden ordnungsgemäß verarbeiten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!