2011-03-16 19 views
0

COC標準是否隱含或明確地允許這樣的語言擴展(或者使用你喜歡的任何其他術語)作爲MOC?是一個符合C++實現的Qt嗎?

也就是說,我們才能技術上呼叫QT(包括MOC)標準的C++實現?

+1

我不明白爲什麼這個問題值得讚賞。因爲你不喜歡這種問題? – 2011-03-16 19:41:04

+2

downvotes(不是我的)可能是因爲你的問題沒有意義。 Qt完全不是C++實現,符合或其他。 – meagar 2011-03-17 15:50:50

+0

@meagar和所有其他人:我知道Qt是一個庫,但隨着MOC它可以被認爲是一個實現,不是嗎? – 2011-03-17 15:52:06

回答

5

MOC是一個代碼生成器,不是語言擴展。所有的代碼moc生成的,你也可以手工編寫(這會很費時間,儘管麻煩和容易出錯)。 Qt使用一些宏,比如Q_OBJECT,Q_SIGNALS,Q_SLOTS等用於聲明並提示moc。這對預處理器來說是完全「合法」的用法。唯一可能會考慮非標準的是在構建項目時運行moc以生成額外代碼的額外步驟。儘管這是構建系統的問題(並且代碼生成並不罕見,請參閱解析器,IPC接口等),並且不在C++範圍內。

3

MOC在技術上是一個預處理器,因此與C++合規性問題無關。

+1

我相信預處理器是實現的一部分 – 2011-03-16 19:35:55

+6

C預處理器是;外部預處理器超出了標準。 – geekosaur 2011-03-16 19:37:36

+1

@阿爾曼相信的東西並不是真的。見geekosaur的答案。 – RedX 2011-03-17 15:56:43

14

這個標準並沒有告訴你在編譯它們之前不應該預處理你的文件,這就是moc所做的,所以這是完全合法的。而Qt是C++的庫,而不是該語言的實現。

0

輸入與MOC不一致C++ - MOC接受關鍵字slotssignals。但是來自MOC的輸出符合C++。

編輯回覆弗蘭克奧斯特費爾德的COMENT(我不能評論回覆,我需要的格式):

slotssignals是關鍵字的MOC預處理。如果Q_MOC_RUN定義(這是MOC運行時),然後qobjectdefs.h有:

#define slots slots 
#define signals signals 

這讓他們取代的。

+1

插槽和信號不是關鍵字,它們是有效的預處理器宏。該代碼仍然是有效的C++,源文件編譯完美沒有moc。 moc只是生成_additional_代碼,它不會修改現有的.h或.cpp文件。 – 2011-03-17 15:47:42

+0

只有moc運行,即代碼生成器,才使它們保持未被取消。當gcc運行時,它對代碼沒有任何作用。 – 2011-03-20 22:05:59

相關問題