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接受关键字,例如 slotssignals. 。但是 输出 从MOC符合C ++。

编辑 要回复弗兰克·奥斯特菲尔德(Frank Osterfeld)的coment(我无法在评论中回复,我需要格式化):

slotssignals 是MOC预处理器的关键字。如果定义了Q_MOC_RUN(MOC运行时是在此时),则qobjectDefs.h具有:

#define slots slots
#define signals signals

这使他们没有取消。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top