한국어
Qt
 

General and Desktop Q_D매크로와 d-pointer

makersweb 2019.05.07 21:53 조회 수 : 872

pimpl 이디엄(관용구)에 대해서 알고있다면 d-pointer가 새롭지 않을것이다. (이를 종종 불투명한 포인터라고 부르기도 한다.)

 

먼저 Pimpl이란 "pointer to implementation" 이라는 문장의 약자로 클래스의 자료 멤버들을 구현 클래스를 가리키는 포인터로 대체하고 구현클래스(자료 멤버 및 함수들)는 .cpp로 옮겨서 구체적인 코드를 외부로 노출하지 않는 것이다. 제프 섬너(Jeff Sumner)에 의해 제일 먼저 사용되었다.

 

이 Pimpl 이디엄을 Qt에서는 d-pointer로 불린다. 구현에 대한 변경이 사용자에게 영향을 주지않도록 할 수있으며 API 라이브러리를 동적으로 링크되는 응용프로그램을 다시 컴파일 하지 않고 계속 실행 될 수 있게 호환성을 유지하도록 하는 설계에 적합하다.

 

Qt의 소스코드를 보면 다음과 같은 코드를 많이 볼 수 있다.

Q_D(xyz);

 

Q_D 와 같은 매크로는 구현클래스의 포인터(d-pointer를 반환) 제공한다.

qglobal.h

#define Q_D(Class) Class##Private * const d = d_func()

 

예제:

qdpointer.zip

 

참고 링크:

https://en.wikipedia.org/wiki/Opaque_pointer#cite_note-4

https://wiki.qt.io/D-Pointer

번호 제목 글쓴이 날짜 조회 수
공지 Qt프로그래밍(QtQuick) Beginner를 위한 글 읽는 순서 운영자 2019.01.05 87676
119 안드로이드 가상장치 사용 file makersweb 2019.01.13 1181
118 QMake 프로젝트를 CMake 프로젝트로 변환 with qmake2cmake makersweb 2022.09.17 1188
117 Qml에서 커튼효과 구현 예제 - Shader Effects file 운영자 2018.12.05 1212
116 QProcess 예제 (프로그램 재시작) file makersweb 2023.01.25 1233
115 Qt 6의 비동기 API makersweb 2020.10.19 1314
114 많은 리소스를 사용하는 Qt프로젝트에서 고려해봐야 할 qmake 옵션 makersweb 2019.10.11 1318
113 Qt 하이브리드 애플리케이션(Hybrid App) 개발 file makersweb 2023.02.08 1326
112 재진입(Reentrancy) 및 스레드 안전성(Thread-Safety) makersweb 2020.04.19 1351
111 Qt 스마트 포인터 (QSharedPointer, QScopedPointer, QPointer) makersweb 2022.08.18 1364
110 웹기반 Qt Design Viewer [2] file makersweb 2019.10.23 1397
109 tslib의 ts_calibrate를 응용해서 Qt로 터치보정기능 구현 file makersweb 2019.04.06 1462
108 qInstallMessageHandler를 이용한 디버그 메세지 출력 제어하기 makersweb 2019.02.25 1470
107 QThread 및 QMutex 예제 makersweb 2021.01.12 1478
106 Qbs에 대한 소개와 설치하는 방법 makersweb 2019.10.09 1486
105 싱글터치 스크린 및 임베디드 리눅스 기반에서 Qt 터치입력 makersweb 2018.12.24 1513
104 QML과 JavaScript 의 숫자 관련 내장된 함수 makersweb 2021.03.28 1558
103 Qt Quick 3D 소개 makersweb 2019.11.09 1581
102 QML에서 undefined를 확인하는 방법 makersweb 2017.11.29 1603
101 ApplicationWindow 와 메뉴바(MenuBar)구성 file makersweb 2020.01.04 1615
100 Widgets(C++) 기반의 기본 스타일을 Dark 테마 및 Material 디자인 스타일로 바꾸기 file makersweb 2023.01.28 1630