2011-06-01 72 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::在地图文件中。

相关问题