0

我的应用程序可以在仍然默认为 Qt4.x 而不是 Qt5.x 的系统上使用,我试图做一个“快速而肮脏”的版本端口,可以编译/链接并与库的任一主要版本一起运行. 我想知道解决 Qt4.x 中没有 Q_NULLPTR的最佳方法是什么?我看到了这个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项目文件中?

4

1 回答 1

0

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

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

当然,您始终可以选择简单的方法并使用NULL0适用于所有 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文件中定义该宏。但是,我不知道如何使用 Qt4 的 QMake 检测活动的 C++ 版本。

于 2017-01-25T21:11:32.730 回答