Замена 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.

Другие вопросы по тегам