2013-05-14 106 views
3

在C有自省技術++像那些在Python?C++自省技術,類似蟒蛇

例如:我想獲取有關特定對象的詳細信息,而無需通過頭文件會或再參考CPP參考。

我要求一個適當的問題,或搬到這裏錯了方向?

更新:

基於下面的答案,這個答案是有關我的問題:How can I add reflection to a C++ application?

+0

你是指反射? https://www.google.com/search?q=reflection+in+c%2B%2B – 2013-05-14 17:43:10

+0

我不知道有關反思,可能是這樣..我從這個角度來談論:存在能夠遍歷一個類型的成員,枚舉它的方法,屬性等等。 – securecurve 2013-05-14 17:47:08

+1

一般爲「否」。 C++的標準編譯模型意味着基本沒有任何類型特徵保留在編譯的機器代碼中,因此它們在運行時不可檢查。 – 2013-05-14 17:50:12

回答

0

C++有一個內置的RTTI系統,雖然它的大部分可怕的一文不值。結果使用自定義反省。

反思在C++中實現有兩個主要方法:preprocesing步驟,其中在掃描cpp文件並創建數據庫/生成CPP代碼;使用模板。我寫了一些關於模板技術here的文章。

如果你對使用自省而不是實現它更感興趣,我建議查找clReflect,或者你可以試試cpfg

+0

它似乎是不夠直接作爲蟒蛇..我需要考慮你上面提到的東西..謝謝! – securecurve 2013-05-14 17:55:13

+2

@securecurve是的,這很難,因爲它不受語言本身的支持。 – RandyGaul 2013-05-14 17:55:38

+0

使用IDE可以更有幫助嗎?由於對象的手動調查將比頭疼得多。如果您知道一個或多個支持交叉點的IDE(無論底層技術如何),請讓我知道...謝謝! – securecurve 2013-05-15 00:10:47

2

Python和C++是完全不同的語言。通常, 編譯完成後,幾乎所有的類型信息都會丟失。所有你能做的就是問,如果一個對象是 一個特定的類(使用typeid),或者如果它是 一個特定的類的實例(使用dynamic_cast)。從理論上講, 也可以使用typeid::name()得到類型的名稱,但在 的練習中,該標準並沒有對 的返回值施加任何有用的東西,並且某些編譯器(例如g ++)不會給你任何東西 有用。