czytałem this article i natknąłem się następującą definicją (w qglobal.h):Jaki jest pożytek z qGetPtrHelper w tym przykładzie?
template <typename T> static inline T *qGetPtrHelper(T *ptr) { return ptr; }
template <typename Wrapper> static inline typename Wrapper::pointer qGetPtrHelper(const Wrapper &p) { return p.data(); }
#define Q_DECLARE_PRIVATE(Class) \
inline Class##Private* d_func() { return reinterpret_cast<Class##Private *>(qGetPtrHelper(d_ptr)); } \
inline const Class##Private* d_func() const { return reinterpret_cast<const Class##Private *>(qGetPtrHelper(d_ptr)); } \
friend class Class##Private;
Rozumiem, że makro określa wspólne funkcje dla klas, które wykorzystują D-pointer/pImpl wzór. Jednak nie bardzo rozumiem potrzebę funkcji qGetPtrHelper
. Po prostu zwraca kopię wskaźnika, który zostanie od razu rzucony. Nie można zmienić wartości zmiennej ptr
bezpośrednio bez tej funkcji?
Och, jest ich dwóch, po prostu pominąłem ten drugi, ponieważ myślałem, że to nie ma znaczenia dla pytania (tego też nie zrozumiałem, ale pomyślałem, że zadam jeszcze jedno pytanie, czy nadal będę nie rozumiem tego po tym). Myślę, że to ładnie to tłumaczy. Dzięki. –