Tak, można rzutować obiektu do const
, zadzwoń wersję const
, a następnie rzucić wynik na udziały const
:
return const_cast<B&>(static_cast<const A*>(this)->findB());
Casting dala const
jest bezpieczny tylko wtedy, gdy dany obiekt nie został uznany const
. Ponieważ jesteś członkiem funkcji innej niż const
, możesz o tym wiedzieć, ale to zależy od implementacji. Rozważ:
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;
};
Ogólnie rzecz biorąc, moje funkcje członka są krótkie, więc powtórzenia są dopuszczalne. Czasami możesz uwzględnić implementację w funkcji prywatnego szablonu i wywołać ją z obu wersji.
Wydaje lubisz odniesień dużo. –
Nie ma sensu używanie wskaźników lub kopii, jeśli nie są potrzebne – dchhetri