Ja, Sie das Objekt const
werfen können, rufen Sie die const
Version, warf dann das Ergebnis const
auf nicht:
return const_cast<B&>(static_cast<const A*>(this)->findB());
Casting weg const
sicher ist nur, wenn das betreffende Objekt war ursprünglich nicht erklärt const
. Da Sie sich in einer Member-Funktion befinden, die nicht in der const
ist, können Sie wissen, dass dies der Fall ist, aber es hängt von der Implementierung ab. Überlegen Sie:
class A {
public:
A(int value) : value(value) {}
// Safe: const int -> const int&
const int& get() const {
return value;
}
// Clearly unsafe: const int -> int&
int& get() {
return const_cast<int&>(static_cast<const A*>(this)->get());
}
private:
const int value;
};
Im Allgemeinen sind meine Mitgliedsfunktionen kurz, so dass die Wiederholung tolerierbar ist. Sie können die Implementierung manchmal in eine private Template-Member-Funktion einbeziehen und diese aus beiden Versionen aufrufen.
Es scheint, dass Sie wie Referenzen viel. –
Kein Punkt in der Verwendung von Zeigern oder Kopien, wenn nicht benötigt – dchhetri