C++ 我应该尽可能多地使用#ifndef Q#u MOC#u RUN吗?
我有一个使用Boost库的Qt/C++项目,我看到Boost头如下所示: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可能会引起问题 问题是,我不应该使用这个保护来
#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,谢谢您的回复!为什么不一直这样做来节省构建时间呢?