這篇文章主要介紹反射(reflection)的基本思想。
所謂反射,就是指物件成員的自我檢查。
使用反射程式設計(reflective programming),就可以編寫出通用的操作,可對具有各種不同結構的類進行操作。
使用通用的值儲存器qvariant,就可以按照一種統一的方式來對基本型別和其它普通型別進行操作。
在介紹反射程式設計之前,需要了解幾個概念:
所謂元物件(meta object),就是描述另乙個物件結構的物件。
qmetaobject是元物件模式(metaobject pattern)的乙個qt實現,它提供了乙個qobject物件所擁有的屬性和方法的資訊。元物件模式有時也稱為反射模式(reflection pattern)。
乙個擁有元物件的類就可以支援反射,這是乙個許多物件導向語言都具有的性質。雖然c++中不存在反射,但qt的元物件編譯器(metaobject compiler,moc)可以為qobject生成支援這種機制的**。
那麼這個類需要滿足怎樣的條件呢?
只要滿足上面的條件,每個派生自qobject的類都會擁有乙個由moc為其生成的qmetaobject。
qobject擁有乙個成員函式,它能夠返回指向物件的qmetaobject的指標。這個函式的函式原型是
[virtual] const qmetaobject *qobject::metaobject() const
可以使用qmetaobject的下面這些方法來獲取乙個qobject的資訊。
還有幾個非常有用的函式,我們接下來一一介紹。
通過使用qmetaobject和qmetaproperty,就可以編寫足夠通用的**來處理所有具有自我描述功能的類。
QT學習筆記之QT網路程式設計
tcp 傳輸控制協議,提供的是面向連線 可靠的位元組流服務。當客戶和伺服器彼此交換資料前,必須先在雙方之間建立乙個tcp連線,之後才能傳輸資料。tcp提供超時重發,丟棄重複資料,檢驗資料,流量控制等功能,保證資料能從一端傳到另一端。udp 使用者資料報協議,是乙個簡單的面向資料報的運輸層協議。udp...
反射空間程式設計
反射空間程式設計 1.space 已建立的空間 動作 2.屬性 3.子集 4.反射集 優化反射集合 應當也必須有乙個或者多個space對反射集進行優化管理 反射訓練 根據具有反射集管理功能的space進行選擇性訓練。5.狀態 1就緒,2啟用,3被啟用 不觸發該space的反射集 4活動,5疲憊,6休...
Go反射程式設計
reflect.typeof vs.reflect.valueof func checktype v inte ce func testbasictype t testing.t 利用反射編寫靈活的 type employee struct func e employee updateage new...