2017-01-25 8 views
0

내 응용 프로그램은 여전히 ​​Qt5.x가 아닌 Qt4.x로 기본 설정되어있는 시스템에서 사용할 수 있으며 컴파일/링크 할 수있는 버전의 "빠르고 더러운"포트를 사용하려고했습니다. 도서관. 이 무엇이 궁금 해서요 Qt4.x에서 Q_NULLPTR이 없어지는 방법은 없을까요? 내가 SO와 정의를 표시하는 대답 this에서 언급 한 링크를 보았다 :Qt5 응용 프로그램을 Qt4로 백 포트 할 때 Q_NULLPTR로 대체 하시겠습니까?

이 가
#ifdef Q_COMPILER_NULLPTR 
# define Q_NULLPTR   nullptr 
#else 
# define Q_NULLPTR   NULL 
#endif 

그래서 난 그냥 사용해야을 A : 내 qmake 프로젝트 파일

contains(QT_MAJOR_VERSION, 4) { 
DEFINES += Q_NULLPTR=NULL 
} 

?

+0

왜 응용 프로그램에서'nullptr'이 아닌'Q_NULLPTR'을 사용합니까? C++ 11 컴파일러를 사용하는 경우 사용하는 Qt 버전은 중요하지 않습니다. – sharyex

+0

나는 "FOSS 어플리케이션에 기여하고 있습니다."라고 말하면 어떨까요? 몇 년 전에 Qt 5.xa로 바꾼 후에는 Q_NULLPTR을 사용하기 시작했습니다. Qt4로 돌아갈 방법을 찾고있었습니다. .x와 호환되며 가능한 한 적은 변경을하십시오. 그리고 나는 Qt4.x를 사용하는 사람들이 C++ 11 컴파일러를 사용할 것이라고 확신하지 못한다. (예를 들어,'gcc' 4.7이 아닌 4.9) ... – SlySven

답변

0

Q_NULLPTR은 C++ 11 가능 컴파일러와 이전 C++ 98/03 컴파일러를 모두 지원하는 Qt의 방법입니다. 당신은 실제로 그 수준의 세련미가 필요합니까? 그렇지 않다면 컴파일러에 따라 NULL, 0 또는 nullptr을 직접 사용하십시오.

그렇지 않으면 현재 활성화 된 C++ 버전을 감지해야하기 때문에 상황이 더 복잡해집니다. 아래 편집을 참조하십시오.

언제나 쉬운 방법을 선택하고 모든 버전의 C++에서 작동하는 NULL 또는 0을 사용할 수 있습니다. 당신은 아마 정의 할 수 있습니다, 그래서 정말 좋은하지

#if __cplusplus >= 201103L 
    #define Q_NULLPTR nullptr 
#else 
    // not NULL to stay consistent with Qt’s convention 
    #define Q_NULLPTR 0 
#endif 

단지 Q_NULLPTR에 액세스 할 헤더를 포함한다 :

편집

당신이 사용할 수 Qt5의 동작을 모방하려면 그 매크로는 .pro 파일에 있습니다. 그러나 Qt4의 QMake를 사용하여 활성 C++ 버전을 검색하는 방법을 모르겠습니다.

+0

Q_NULLPTR __은 _Qt4.x에 없기 때문에 ___ 그러므로 내 질문 - 나는 우리가 과거에 힘들었던 '0'을 사용하고 있다고 생각하지만 그것이 최선의 선택인지 확실하지 않았다 ...! – SlySven

+0

Qt4는'Q_NULLPTR'을 제공하지 않습니다. 그것은 단지 일반적인 매크로 일뿐입니다. Qt4 빌드에 대해 자신 만의 코드를 빌드 할 때 유연성을 필요로 할 경우 직접 정의하지 않을 이유가 없습니다. – besc

+0

그래,하지만 __what__이 경우에 그것을 정의하는 가장 좋은 방법입니다 - 그게 내가 생각하고있는 것입니다! 8-) 나는 Qt가 여전히 Qt 4에서도'Q_COMPILER_NULLPTR'을 정의 할 수 있기를 바랬다. 그러나 나는 한 번 살펴 봐야 할 것 같아 ... – SlySven