0

C++ 标准是否隐含或显式允许像 MOC 那样的语言扩展(或使用您喜欢的任何其他术语)?

也就是说,我们可以在技术上将 Qt(包括 MOC)称为符合 C++ 的实现吗?

4

4 回答 4

14

该标准并没有告诉您在编译文件之前不应该对文件进行预处理,这就是这样moc做的,所以这是完全合法的。Qt 是 C++ 的库,而不是该语言的实现。

于 2011-03-16T19:36:00.740 回答
5

MOC 是代码生成器,而不是语言扩展。moc 生成的所有代码您也可以手动编写(虽然这会很耗时、令人麻木且容易出错)。Qt 使用一些宏,例如 Q_OBJECT、Q_SIGNALS、Q_SLOTS 等来进行声明并为 moc 提供提示。这是预处理器的完全“合法”使用。您可能认为非标准的唯一事情是在构建项目时运行 moc 以生成额外代码的额外步骤。不过,这是构建系统的问题(代码生成并不少见,参见解析器、IPC 接口等)并且超出了 C++ 的范围。

于 2011-03-16T20:47:27.547 回答
3

MOC 在技术上是一个预处理器,因此与 C++ 合规性问题无关。

于 2011-03-16T19:35:31.170 回答
0

MOC的输入不符合 C++ - MOC 接受关键字,例如slotsand signals。但是 MOC 的输出符合 C++。

编辑以回复 Frank Osterfeld 的评论(我无法在评论中回复,我需要格式):

slots并且signals是 MOC 预处理器的关键字。如果定义了 Q_MOC_RUN(即 MOC 运行时),则 qobjectdefs.h 具有:

#define slots slots
#define signals signals

这使它们未被取代。

于 2011-03-17T15:45:53.983 回答