Bagaimana untuk Menggunakan Idiom Qt PIMPL dalam C?

Patricia Arquette
Lepaskan: 2024-10-23 14:44:44
asal
763 orang telah melayarinya

How to Use the Qt PIMPL Idiom in C  ?

Menggunakan Idiom PIMPL Qt

Pengenalan

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

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 &amp;);
};</code>
Salin selepas log masuk

Di sini , makro Q_DECLARE_PRIVATE mengisytiharkan kelas PIMPL dan menyediakan mekanisme yang diperlukan untuk mengaksesnya.

Pelaksanaan

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>
Salin selepas log masuk

Q_DECLARE_PRIVATE

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.

Q_PRIVATE_SLOT

Makro ini digunakan untuk keserasian Qt 4 atau apabila menyasarkan bukan C 11 penyusun. Ia mengisytiharkan slot peribadi untuk kegunaan dalaman.

Q_DECLARE_PUBLIC

Makro Q_DECLARE_PUBLIC menyediakan akses kepada antara muka daripada PIMPL. Ia menjana pelaksanaan sebaris kaedah penolong q_func(), serupa dengan d_func().

Gotchas Biasa

  • Kelas PIMPL tidak seharusnya menjadi kelas persendirian dalam kelas antara muka itu sendiri.
  • Penunjuk PIMPL hendaklah const untuk kelas yang tidak boleh disalin/tidak boleh diberikan seperti QObject.
  • Elakkan menggunakan peletakan baharu dan simpulan bahasa Fast Pimpl atas sebab prestasi.

Kelas Non-QObject Copyable

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!

sumber:php
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!