Wenn ich Sie richtig verstehe, wollen Sie die name.method()
innerhalb foo()
und der Compiler lässt Sie nicht. Ist ClassName::method()
zufällig eine nicht-konstante Methode? Da name
wird als eine const
Parameter zu foo()
können Sie nur aufrufen const
Funktionen darauf.
Aktualisierung: wenn ClassName::method()
nicht konstant ist, aber den Zustand nicht wirklich ändert, wäre es natürlich am besten, es zu const
. Für den Fall, dass Sie das aus irgendeinem Grund nicht können, sehe ich die folgenden Möglichkeiten:
- (der offensichtliche Weg, wie @Naveen aufgezeigt hat - danke :-) erklären
name
als nicht-konstanter Methodenparameter.
- eine nicht-konstante Kopie von
name
und rufen Sie method
darauf - wie Sie es tatsächlich getan haben. Dies funktioniert jedoch nur, wenn der Zuweisungsoperator und/oder der Kopierkonstruktor richtig implementiert ist für ClassName
. Sie schreiben jedoch "nachdem foo ausgeführt wurde, ist der ursprüngliche Name durcheinander geraten" Das ist eine sehr vage Beschreibung, aber sie kann so interpretiert werden, dass das Kopieren einige unerwünschte Nebenwirkungen auf name
was darauf schließen lässt, dass diese Funktionen nicht korrekt oder überhaupt nicht implementiert sind.
- (auf die böse Art) die Verstopfung mit
const_cast
- dies sollte wirklich ein letzter Ausweg sein, und nur, wenn Sie sicher sind, dass ClassName::method()
ändert eigentlich keinen Zustand.
Aktualisierung2 zu @AKNs Kommentar - Beispiel für das Wegwerfen von Konstanten:
void foo(const ClassName &name)
{
ClassName& temp = const_cast<ClassName&>(name);
... ....
}