2012-05-12 61 views
1

我一直在與QT合作,我注意到他們通過實現類的一些新功能(如private slots: public slots: signals:等等)將OOP帶到另一個級別......他們在做什麼來聲明這樣的類的分類?它是編譯器特有的還是僅僅是一種typedef?我猜測它可以移植到主流操作系統,因爲QT可以在多個系統上運行。我出於好奇而問,並創建自己的子類來幫助組織和創建更多的OOP程序。例如在C++中創建更多的OOP類

class Main 
{ 
handles: 
    HANDLE hWin; 
threads: 
    HANDLE hThread; 
}; 

,然後清除繼承會被簡單地做

class Dialog : handles Main 
{ 

}; 
+1

這是一個設計模式,請參見[here](http://qt-project.org/doc/qt-4.8/signalsandslots.html)。 –

回答

3

對我來說,看起來人們並沒有回答你的問題,他們回答了一些與衆不同的問題。你似乎在談論恰好用於插槽的「章節標籤」,並且希望自己的類節的章節標籤像手柄和線程一樣。這是QT在將代碼發送給編譯器之前對其進行預處理的功能。如果不添加另一個編輯階段,這不是你自己可以做的事情。

也就是說,除了告訴QT預編譯器找到它的插槽部分外,它確實沒什麼用處,你不能繼承它們,就像你想要做的那樣。它只是標記生成內省代碼的區域。

而且你真的不想這樣做。如果你有獨立的組件,你可以將它們分成不同的類,然後讓那些控制它們交互的大型類的成員分開。如果您嘗試拆分具有不同部分的類,編譯器將無法確保它們不以其他方式進行交互,因爲編譯器不會將這些類型的限制使用不同的成員。

0

Qt meta-object compiler moc實現的。它被稱爲signals and slots容易。 moc也爲預處理類增加了一個內省系統。還有一些信號/插槽實現不需要特殊的預處理步驟,例如Boost.SignalsBoost.Signals2。我不會考慮信號和插槽或多或少的OOP,而不是通過函數調用傳遞的正常消息,但這是有爭議的,並不真正相關。

+0

所以有可能實現它而不用編譯器特定(Boost.signals)來做到這一點,但我應該從哪裏開始?我應該去通過Boost.Signals來源找到他們的實施基礎我的? – user99545

+0

@ user99545首先,您應該瞭解您的新關鍵字實際上會做什麼,這是標準功能無法實現的。我真的沒有看到'thread'塊帶來的好處。另外,有很多關鍵字是可怕的。 – pmr