2011-06-01 67 views
1

有沒有一種方法以編程方式枚舉命名空間及其在C++成員?有沒有一種有效的方法來枚舉C++中的命名空間?

我有一個大的C++程序,其利用幾個命名空間。我不熟悉代碼庫,並想確定哪些函數/類/變量與哪些名稱空間相關聯。

我目前的做法是簡單地逐個刪除'使用命名空間'指令並檢查編譯過程中的中斷,但我認爲有更好的方法來實現相同的目標。

+1

你用什麼編譯器/ IDE? – Xeo 2011-06-01 11:06:30

+0

emacs和g ++(4.4) - 刪除指令和編譯完成工作,我只是想知道是否可能沒有更優雅/高效/有效的方式去。 – si28719e 2011-06-01 11:12:34

+1

刪除'using namespace'本身就是一個目標:)還要考慮(添加到外部工具列表中):ctags y cosas por el estilo。 – 2011-06-01 11:34:30

回答

4

這是不可能在C++中。

但是,您可以使用外部工具(如Doxygen),它們將創建將列出名稱空間所有成員的文檔(HTML和其他格式)。

+0

太棒了。我不知道doxygen可以運行在任意的,未公開的源代碼上。這非常有幫助! – si28719e 2011-06-01 11:25:27

1

不幸的是,自省並不是C++的一大特色。沒有辦法(在語言中)去做你想做的事。您需要一個外部代碼分析工具(可以解析代碼並構建參考)來完成這項工作。我用cscope進行了大量的分析,但據我所知它並不真正瞭解的命名空間,因此可能並不適合你的工具。

1

您可以使用C++前端(例如Elsa)爲您完成這項工作。

還可以考慮使用具有'Go To Defiinition'功能的良好IDE(例如Microsoft Visual Studio)。

1

您可以通過運行Doxygen開始生成項目中定義的所有函數/類/名稱空間的索引。確保編輯設置以生成未記錄符號的索引。

0

如果您知道要查找哪些名稱空間,則可以生成一個映射文件(g++ -Wl,-Map,MyMapFile.map)。然後搜索例如MyNamespace::在地圖文件中。

相關問題