题
C ++标准是否隐含或显式地允许像MOC一样允许使用此类语言扩展(或使用您喜欢的其他术语)?
也就是说,我们可以吗 从技术上讲 调用QT(包括MOC)为C ++实现?
解决方案
MOC是代码生成器,而不是语言扩展。所有代码MOC生成您也可以手工编写(虽然很耗时,麻烦和容易出错)。 QT使用一些宏(例如q_object,q_signals,q_slots等)进行声明,并给予MOC提示。这是预处理器的完美使用。您唯一可能认为非标准的是运行MOC的额外步骤,以在构建项目时生成额外的代码。不过,这是构建系统的问题(并且代码生成并不是那么异常,请参见解析器,IPC接口等),也是C ++的范围之外。
其他提示
该标准不会告诉您在编译文件之前不应该预处理文件,这就是什么 moc
确实,这是完全合法的。 QT是C ++的库,而不是该语言的实现。
从技术上讲,MOC是预处理器,因此与C ++依从性问题无关。
这 输入 MOC不符合C ++ -MOC接受关键字,例如 slots
和 signals
. 。但是 输出 从MOC符合C ++。
编辑 要回复弗兰克·奥斯特菲尔德(Frank Osterfeld)的coment(我无法在评论中回复,我需要格式化):
slots
和 signals
是MOC预处理器的关键字。如果定义了Q_MOC_RUN(MOC运行时是在此时),则qobjectDefs.h具有:
#define slots slots
#define signals signals
这使他们没有取消。
不隶属于 StackOverflow