自动将C ++类重构为单独的文件

时间:2012-12-17 10:41:12

标签: c++ refactoring automated-refactoring

我继承了一个包含数万行的相当大的项目,但之前的开发人员只将它们打包成6个文件(OMG!)......

因此,为了便于阅读,我想将所有类自动拆分为自己的cpp / h文件。

是否有任何工具能够做到这一点?

3 个答案:

答案 0 :(得分:1)

为了重构C ++代码库,您需要的是一个可以解析C ++,保留头文件,然后遵循#includes并处理它们的工具。您必须为每对依赖项构建“a-depends-on-b”映射,然后您必须对它们进行聚类。最后,您必须能够根据群集重新生成源代码。

并且您希望在完整的代码库上完成此操作,而不仅仅是一个编译单元。

这是一个非常难找的工具: - }我认为你不会发现它是现成的。

我们的DMS软件再造工具包有很多这方面的内容。它是一个通用的程序分析和转换系统,具有完整的C ++前端,并且具有可控的预处理器,因此它可以根据需要扩展/不扩展#includes。它可以捕获依赖于b的关系(我们在2600万行代码的C系统上完成了这一点),并且它已经证明有能力象征性地推理预处理器条件;有可能捕获“如果依赖于b”。

有了这些信息,您需要群集。我认为要做到这一点,你需要某种通用的聚类算法,以及一些用户输入来覆盖它(“我坚持,只留下这个#include文件,这两个看似无关的东西在一起”)。然后,DMS的程序转换部分可用于机械地拆分代码并将文件包含在分组的依赖声明中。

DMS是一个复杂的工具;毕竟,它必须处理像C ++这样令人讨厌的事情。配置它来完成上述任务并非易事,但我认为它在技术范围内。

但是,这些都不能帮助您立即获得一个工具来帮助您解决问题。

答案 1 :(得分:0)

我很确定没有工具可以自动执行该任务。这仍然是一个活跃的研究领域。例如,请参阅“Towards Automating Class-Splitting Using Betweenness Clustering”。我知道有几种Java工具可以提供一些帮助(JDeodorantext-c),但这些工具并非完全自动化。我不知道任何C ++工具。

答案 2 :(得分:-4)

您没有说出您正在使用的编辑器或平台,因此不清楚为什么大文件存在问题。

我的猜测是这是你的解决方案:

  • 获得一个更好的编辑器,可以处理大文件。

一个好的编辑器应该能够按名称找到一个类,有一个类浏览器,可以跳转到任何类,成员,函数或任何其他定义的定义,从右边找到任何符号的使用 - 点击或键盘快捷键通常会让你找到方便的方式,文件的大小将无关紧要。

另一方面,也许你有一个好的编辑器,只需要学习如何在其中做这些事情。