各位版上高手大家好
自從我知道 Java、C# 語言,有反射這功能后
就很希望C++也支持功能,可是上網查老半天,都還是說C++沒有這功能,
真要的話必須自己去寫class,定一些規范,就可以做出來
事實上我也寫了一個簡單的library,可以完成基本的需求
可是我一直有個問題
像 BCB、Visual Studio 等 IDE,在我們輸入物件名稱后
經常會有提示,該物件有什么函式可用的提示視窗出來
這功能到底是么實作的?
是單純決議原始碼檔,記錄下來該 物件有哪些 變數、函式可用,這樣嗎?
因為小弟常做的專案,需要經常處理 struct 結構體
不同結構體,成員不同,型態也不同,很常也要為了它們做一些 UI介面來顯示
一直在追求有沒有什么方法可以自動識別 結構體,遍歷成員變數,自動產生報表的功能
請問有人有類似需求和解決方法嗎?
謝謝 <(_ _)>
uj5u.com熱心網友回復:
可以參考Qt的元物件系統。(Meta Object)。但需要顯式地“注冊”一遍型別。
也可以參考這個
https://github.com/bytemaster/boost_reflect
boost_reflect
uj5u.com熱心網友回復:
Qt的moc只做到了編譯時反射(這個一般稱之為introspection),沒有運行時reflection(QML有可能做到,畢竟是運行時解釋執行js)。另外,moc的實作很不雅觀,要在原始碼中插入一些亂七八糟的宏作為定位標記,這也是沒有自己的編譯器而不得已的方法。反射的基礎是RTTI,還是應該功夫用在編譯器內,程式可以看起來很簡潔uj5u.com熱心網友回復:
對,關鍵是一旦用了metaobj,就必須在編譯前moc。boost的反射稍好,但是也不夠好。關鍵是編譯器自己不支持。
uj5u.com熱心網友回復:
反射是依靠元資料編譯的,元資料不恰當的比喻你可以想象成類似C++的模板,寫了個模板,運行時就依照模板解釋資料。uj5u.com熱心網友回復:
元資料是作為RTTI嵌入到可執行程式中,所以可以在運行時被訪問到轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/8045.html
標籤:基礎類
上一篇:有會做獲取網站訪客電話資料的嗎?
