Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我应该尽可能多地使用#ifndef Q#u MOC#u RUN吗?_C++_Qt_Boost_Include_Moc - Fatal编程技术网

C++ 我应该尽可能多地使用#ifndef Q#u MOC#u RUN吗?

C++ 我应该尽可能多地使用#ifndef Q#u MOC#u RUN吗?,c++,qt,boost,include,moc,C++,Qt,Boost,Include,Moc,我有一个使用Boost库的Qt/C++项目,我看到Boost头如下所示: #ifndef Q_MOC_RUN #include <boost/date_time/posix_time/posix_time.hpp> #include <boost/date_time/gregorian/gregorian.hpp> #endif \ifndef Q\u MOC\u运行 #包括 #包括 #恩迪夫 我读到如果你不这样做,MOC可能会引起问题 问题是,我不应该使用这个保护来

我有一个使用Boost库的Qt/C++项目,我看到Boost头如下所示:

#ifndef Q_MOC_RUN
#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/date_time/gregorian/gregorian.hpp>
#endif
\ifndef Q\u MOC\u运行
#包括
#包括
#恩迪夫
我读到如果你不这样做,MOC可能会引起问题

问题是,我不应该使用这个保护来包含所有其他肯定不包含Q_OBJECT marco的头文件吗?例如,标准库头和其他非Qt库?MOC预处理器运行时会不会节省很多时间?

来自主题:

首先,这是一个已知的主运行中心问题主运行中心无法扩展某些 Boost库中使用的宏。我认为Qt4.8工作的原因是 添加了针对特定Boost宏定义的变通方法 该版本的MOC配置

解决这个问题需要做什么:如上所述,使用 运行Q_MOC_注释出有问题的标题您只需要使用 Q_MOC_在生成MOC文件的文件中运行(例如myheader.h 生成moc_myheader.cpp)。你可以限制黑客攻击仅限于那些文件。 因此,您不需要#ifndef在您的应用程序中使用所有Boost头 限制实施此解决方案的痛苦的项目相当多 一点


这个问题似乎很久以前就解决了,因此,无论您是否没有任何问题,也不需要支持旧版本的Qt,您都可能不会将此宏添加到未来的代码中。

我会说:只有在必要时才这样做。如果“moc导致问题”,编译器通常会告诉您。@Frankosterfield,谢谢您的回复!为什么不一直这样做来节省构建时间呢?