PIMPL(구현 포인터) 관용구를 사용하면 공용 인터페이스와 개인 구현 세부 사항을 분리할 수 있습니다. 클래스 사용자가 해당 세부 사항에 관심을 갖지 않도록 방지합니다. Qt는 아래에 설명된 PIMPL 관용구의 자체 구현을 사용합니다.
Qt의 PIMPL 기반 인터페이스는 다음과 같습니다.
<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>
여기 , Q_DECLARE_PRIVATE 매크로는 PIMPL 클래스를 선언하고 이에 액세스하는 데 필요한 메커니즘을 제공합니다.
PIMPL 클래스인 CoordinateDialogPrivate는 구현 파일에 정의되어 있습니다.
<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>
Q_DECLARE_PRIVATE 매크로는 PIMPL 클래스 선언을 단순화하고 이를 인터페이스 클래스와 연결합니다. 적절한 상수를 사용하여 PIMPL에 대한 액세스를 제공하는 d_func() 도우미 메서드의 인라인 구현을 생성합니다.
이 매크로는 Qt 4 호환성 또는 비C 11을 대상으로 할 때 사용됩니다. 컴파일러. 내부 사용을 위한 전용 슬롯을 선언합니다.
Q_DECLARE_PUBLIC 매크로는 PIMPL에서 인터페이스에 대한 액세스를 제공합니다. d_func()와 유사한 q_func() 도우미 메서드의 인라인 구현을 생성합니다.
PIMPL 관용구는 복사 가능한 QObject가 아닌 클래스에도 사용할 수 있습니다. 그러나 PIMPL 포인터는 const가 아니어야 합니다. 4의 법칙(복사 생성자, 이동 생성자, 할당 연산자, 소멸자)과 독립형 스왑 기능을 구현해야 합니다.
위 내용은 C에서 Qt PIMPL 관용구를 사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!