Мое приложение может использоваться в системах, которые все еще используют Qt4.x по умолчанию, а не Qt5.x, и я пытался создать «быстрый и грязный» порт версии, которая будет компилироваться / связываться и работать с любой основной версией библиотек. , Мне было интересно, что будет Лучший способ обойти отсутствие Q_NULLPTR в Qt4.x? Я видел ссылку, упомянутую в этот ТАК ответ, который обозначил определение как:
#ifdef Q_COMPILER_NULLPTR
# define Q_NULLPTR nullptr
#else
# define Q_NULLPTR NULL
#endif
Так что я должен просто использовать:
contains(QT_MAJOR_VERSION, 4) {
DEFINES += Q_NULLPTR=NULL
}
в моем qmake
файл проекта?
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
не очень хорошо, так что вы, вероятно, захотите определить этот макрос в .профессионал файл. Однако я не знаю, как определить активную версию C ++ с Qtake Qt4.
Других решений пока нет …