Idiom PIMPL (Penunjuk kepada Pelaksanaan) membenarkan untuk memisahkan antara muka awam daripada butiran pelaksanaan peribadi bagi kelas, menghalang pengguna kelas daripada mengambil berat dengan butiran tersebut. Qt menggunakan pelaksanaannya sendiri bagi simpulan bahasa PIMPL, yang didokumenkan di bawah.
Antara muka berasaskan PIMPL untuk Qt kelihatan seperti berikut:
<code class="cpp">class CoordinateDialog : public QDialog { Q_OBJECT Q_DECLARE_PRIVATE(CoordinateDialog) #if QT_VERSION <= QT_VERSION_CHECK(5,0,0) Q_PRIVATE_SLOT(d_func(), void onAccepted()) #endif QScopedPointer<CoordinateDialogPrivate> const d_ptr; public: CoordinateDialog(QWidget * parent = 0, Qt::WindowFlags flags = 0); ~CoordinateDialog(); QVector3D coordinates() const; Q_SIGNAL void acceptedCoordinates(const QVector3D &); };</code>
Di sini , makro Q_DECLARE_PRIVATE mengisytiharkan kelas PIMPL dan menyediakan mekanisme yang diperlukan untuk mengaksesnya.
Kelas PIMPL, CoordinateDialogPrivate, ditakrifkan dalam fail pelaksanaan:
<code class="cpp">class CoordinateDialogPrivate { Q_DISABLE_COPY(CoordinateDialogPrivate) Q_DECLARE_PUBLIC(CoordinateDialog) CoordinateDialog * const q_ptr; QFormLayout layout; QDoubleSpinBox x, y, z; QDialogButtonBox buttons; QVector3D coordinates; void onAccepted(); CoordinateDialogPrivate(CoordinateDialog*); };</code>
Makro Q_DECLARE_PRIVATE memudahkan pengisytiharan kelas PIMPL dan mengaitkannya dengan kelas antara muka. Ia menjana pelaksanaan sebaris kaedah pembantu d_func(), yang menyediakan akses kepada PIMPL dengan ketekalan yang sesuai.
Makro ini digunakan untuk keserasian Qt 4 atau apabila menyasarkan bukan C 11 penyusun. Ia mengisytiharkan slot peribadi untuk kegunaan dalaman.
Makro Q_DECLARE_PUBLIC menyediakan akses kepada antara muka daripada PIMPL. Ia menjana pelaksanaan sebaris kaedah penolong q_func(), serupa dengan d_func().
Idiom PIMPL juga boleh digunakan untuk kelas bukan QObject yang boleh disalin. Walau bagaimanapun, penunjuk PIMPL mestilah bukan const. Peraturan Empat (pembina salin, pembina alih, pengendali tugasan, pemusnah) dan fungsi swap berdiri bebas harus dilaksanakan.
Atas ialah kandungan terperinci Bagaimana untuk Menggunakan Idiom Qt PIMPL dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!