Замена Q_NULLPTR при обратном переносе приложения Qt5 на Qt4?

Мое приложение может использоваться в системах, которые все еще используют 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 файл проекта?

0

Решение

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.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]