将Qt5应用程序向后移植到Qt4时替换Q_NULLPTR?

时间:2017-01-25 20:18:07

标签: c++ qt4 backport

我的应用程序可能会用在仍然默认为Qt4.x而不是Qt5.x的系统上,而我正试图对一个版本的“快速而脏”的端口进行编译/链接并使用主要版本运行的图书馆。我想知道在Qt4.x中缺少Q_NULLPTR的最佳方法是什么?我看到this 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 个答案:

答案 0 :(得分:0)

Q_NULLPTR是Qt支持C ++ 11兼容编译器以及旧版C ++ 98/03编译器的方法。你真的需要那种复杂程度吗?如果没有,那么直接使用NULL0nullptr,具体取决于您的编译器。

否则事情变得更复杂,因为您需要检测当前活动的C ++版本。请参阅下面的编辑。

当然,您始终可以选择简单的方法,并使用适用于所有C ++版本的NULL0

修改

要模仿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 文件中定义该宏。但是,我不知道如何用Qt4的QMake检测活动的C ++版本。