Замена Q_NULLPTR при обратном переносе приложения Qt5 на Qt4?
Мое приложение может использоваться в системах, которые все еще используют Qt4.x по умолчанию, а не Qt5.x, и я пытался создать "быстрый и грязный" порт версии, которая будет компилироваться / связываться и работать с любой основной версией библиотек., Мне было интересно, что будет лучшим способом обойти отсутствие Q_NULLPTR в Qt4.x? Я видел ссылку, упомянутую в этом ответе SO, которая указала определение как:
#ifdef Q_COMPILER_NULLPTR
# define Q_NULLPTR nullptr
#else
# define Q_NULLPTR NULL
#endif
Так что я должен просто использовать:
contains(QT_MAJOR_VERSION, 4) {
DEFINES += Q_NULLPTR=NULL
}
в моем qmake
файл проекта?
1 ответ
Q_NULLPTR
это способ Qt поддерживать как компиляторы с поддержкой C++11, так и более старые C++98/03. Вам действительно нужен этот уровень сложности? Если нет, то просто используйте NULL
, 0
или же nullptr
напрямую, в зависимости от вашего компилятора.
В противном случае все усложняется, потому что вам нужно определить текущую активную версию C++. Смотрите редактирование ниже.
Конечно, вы всегда можете выбрать простой способ и использовать NULL
или же 0
который работает во всех версиях C++.
редактировать
Чтобы имитировать поведение Qt5, вы можете использовать это:
#if __cplusplus >= 201103L
#define Q_NULLPTR nullptr
#else
// not NULL to stay consistent with Qt’s convention
#define Q_NULLPTR 0
#endif
Включая заголовок, чтобы иметь доступ к Q_NULLPTR
не очень хорошо, так что вы, вероятно, захотите определить этот макрос в файле .pro. Однако я не знаю, как определить активную версию C++ с Qtake Qt4.