2010-02-17 44 views
4

在QT,我們可以連接使用下列簡單的語法信號和槽:與升壓信號連接如何實現QT的語法::信號

connect(pObject1, signal1, pObject2, slot2) 

舉例來說,一個可以寫類似:

A a; 
B b;  
a.valueChanged.connect(boost::bind(&B::SetValue, &b, _1)) 

恕我直言,升高信號的:

A a; 
B b;  
connect(&a, SIGNAL(valueChanged(int)), &a, SLOT(setValue(int))); 

隨着升壓::信號的語法,我們會這樣寫語法更復雜。有沒有辦法讓Boost :: Signal的語法更像QT。

+0

說明:QT的人是否使用MOC來支持這種語法?它可以在沒有MOC的情況下實施嗎? – Lev 2010-02-17 09:54:08

回答

4

Qt的事情是它在編譯過程中經歷了一個代碼生成階段,Boost不能這樣做。這意味着Qt可以做一些非常聰明的語法事物,如果不經過類似的過程就無法複製。

引述Wikipedia

被稱爲MOC,這是在一個Qt程序的源運行的工具。它將C++代碼中的某些宏解釋爲註釋,並使用它們生成關於程序中使用的類的「元信息」的附加C++代碼。這個元信息被Qt用來提供C++本身不具備的編程特性:信號/插槽系統,自省和異步函數調用。

(我不能得到的鏈接工作,但它的http://en.wikipedia.org/wiki/Qt_(framework)

編輯:我認爲維基百科的報價是非常清楚的信號/槽系統正在使用的MOC實現。我非常懷疑有什麼方法可以在不使用類似系統的情況下使用相同的語法。