Я читал эту статью и наткнулся на следующее определение (в qglobal.h ):
template static inline T *qGetPtrHelper(T *ptr) { return ptr; }
template 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(qGetPtrHelper(d_ptr)); } \
inline const Class##Private* d_func() const { return reinterpret_cast(qGetPtrHelper(d_ptr)); } \
friend class Class##Private;
Я понимаю, что макрос определяет общие функции для классов, использующих шаблон D-указатель / pImpl. Однако я не совсем понимаю необходимость функции qGetPtrHelper
. Он просто возвращает копию указателя, которая будет приведена сразу же. Невозможно преобразовать переменную ptr
напрямую без этой функции?