回答
MOC是一個代碼生成器,不是語言擴展。所有的代碼moc生成的,你也可以手工編寫(這會很費時間,儘管麻煩和容易出錯)。 Qt使用一些宏,比如Q_OBJECT,Q_SIGNALS,Q_SLOTS等用於聲明並提示moc。這對預處理器來說是完全「合法」的用法。唯一可能會考慮非標準的是在構建項目時運行moc以生成額外代碼的額外步驟。儘管這是構建系統的問題(並且代碼生成並不罕見,請參閱解析器,IPC接口等),並且不在C++範圍內。
這個標準並沒有告訴你在編譯它們之前不應該預處理你的文件,這就是moc
所做的,所以這是完全合法的。而Qt是C++的庫,而不是該語言的實現。
輸入與MOC不一致C++ - MOC接受關鍵字slots
和signals
。但是來自MOC的輸出符合C++。
編輯回覆弗蘭克奧斯特費爾德的COMENT(我不能評論回覆,我需要的格式):
slots
和signals
是關鍵字的MOC預處理。如果Q_MOC_RUN定義(這是MOC運行時),然後qobjectdefs.h有:
#define slots slots
#define signals signals
這讓他們取代的。
插槽和信號不是關鍵字,它們是有效的預處理器宏。該代碼仍然是有效的C++,源文件編譯完美沒有moc。 moc只是生成_additional_代碼,它不會修改現有的.h或.cpp文件。 – 2011-03-17 15:47:42
只有moc運行,即代碼生成器,才使它們保持未被取消。當gcc運行時,它對代碼沒有任何作用。 – 2011-03-20 22:05:59
- 1. 這個實現符合SQL-92嗎?
- 2. 這是一個定點組合器的實現嗎?
- 3. 這是一個可取消Observable的合理實現嗎?
- 4. 它是實現Qt信號的一種方式嗎?
- 5. 是sync.WaitGroup一個Barrier的實現嗎?
- 6. SplFixedArray是在C/C++下實現的嗎?
- 7. 這是一個理智的Objective-C塊實現嗎?
- 8. 這是一個Atomic浮點安全的C++實現嗎?
- 9. 在QT(C++)中實現一個簡單的鼓機的技巧
- 10. 得到一個QT代碼的純C++實現
- 11. 這個實現是PHP中Promise的一個合適的例子嗎?
- 12. 在qt中實現一個GUI Shell
- 13. 重新實現Qt中的shouldInterruptJavaScript()(C++)
- 14. 是一個可以實現PREEMPT的Linux內核實時嗎?
- 15. 是一個被認爲是實現的超類的接口嗎?
- 16. 在C#中爲一個類實現==操作符的最佳實踐是什麼?
- 17. QT EventTransition實現
- 18. 哪一個是官方的Qt SDK(C++)?
- 19. ng-content是一個組件嗎?它是如何實現的?
- 20. 一個類可能符合objective-c中的多個協議嗎?
- 21. Hibernate:一個表,多個實體/持久類,是合法的嗎?
- 22. 這是一個有效的,懶惰的,線程安全的Singleton實現C#嗎?
- 23. 實現一個C++ ThreadLocal
- 24. 實現一個列表C
- 25. Qt實現了_countof還是等價的?
- 26. 現有的C++代碼可以與Qt一起工作嗎?
- 27. 如何使用Qt/QNetworkAccessManager實現SFTP(C++)
- 28. 在qt應用程序中實現live555的QT-C++錯誤
- 29. 實現一個通用類的集合
- 30. 設計模式的混合是一個糟糕的實踐嗎?
我不明白爲什麼這個問題值得讚賞。因爲你不喜歡這種問題? – 2011-03-16 19:41:04
downvotes(不是我的)可能是因爲你的問題沒有意義。 Qt完全不是C++實現,符合或其他。 – meagar 2011-03-17 15:50:50
@meagar和所有其他人:我知道Qt是一個庫,但隨着MOC它可以被認爲是一個實現,不是嗎? – 2011-03-17 15:52:06