d_ptr может быть умным указателем (например, QScopedPointer), и в этом случае его нельзя просто передать в reinterpret_cast: d_func () должен был бы получить доступ к внутреннему указателю, используя функцию-член или, таким образом, требуя две версиимакрос (на самом деле раньше было два, прежде чем существовал qGetPtrHelper).Что qGetPtrHelper делает, так это запускает неявное приведение умного указателя, когда передается в качестве аргумента, к необработанному, таким образом устраняя необходимость в специальной обработке.