5

我将创建现有自动化 C++ 重构工具的比较表,并探索创建此类工具的能力,免费和开源。

我的问题是:您在日常工作中真正使用了哪些重构?有一些明显的事情,比如重命名变量/类/方法,但是 C++ 有没有一些特定的东西,比如处理模板、STL、复制构造函数、初始化程序等等?

我有兴趣为 C++ 开发人员在其编码中每天面临的所有小问题构建逼真的图片,并且至少在理论上可以自动化。我正在和我的同事交谈,但这可能还不够。

提前致谢。

4

6 回答 6

2

从答案中可以清楚地看出,很少有 C++ 程序员见过真正的重构工具。是的,它们非常少见,并且对于您使用的 IDE 来说是高度特定的。这是不可避免的,否则没有好的方法可以找出哪些源代码文件为最终的可执行文件贡献了代码。预处理器使其更具挑战性,您需要知道宏值。需要源代码解析器,但还不够。

VS 的 Visual Assist 是我所知道的。

于 2010-11-18T14:29:06.007 回答
1

看看 Martin Fowler 的重构:改进现有代码的设计重构到模式,作者 Joshua Kerievsky。这些反过来又参考了 GoF设计模式书,所以也得到了。

如果您可以超越基本的重命名功能和提取功能,那么您可能会成为赢家。

于 2010-11-18T11:24:07.393 回答
1

这是我昨天提出的一个 C++ 设计模式:抛弃继承,支持策略

于 2010-11-18T11:52:29.647 回答
1

正如你所说,有明显的事情:

  • 重命名是一
  • 更改函数签名是另一回事(特别是因为函数几乎必然是重复的:头文件中的声明和源代码中的实现)
  • 重命名/移动文件(更新包含指令)

请注意,尽管它是基本的,但很少得到很好的处理。我的主要抱怨是评论通常没有更新(我不是在谈论 doxygen 自动生成的无用混乱)。因此,如果我在头文件中描述类的使用,或者在另一个源文件中使用此类的理由,那么注释现在已过时,因为通过重命名类,现在没有人会知道它指的是什么......

然而,还有更有趣的案例:

  • 更改函数签名时,您需要更新所有调用站点,开发人员需要帮助进行本地化
  • 通过继承,能够对层次结构的所有类进行操作:更改函数签名(再次)或添加/删除虚拟覆盖。
  • 使用模板:概念提案已被删除,如果您可以综合对传递的类型的要求(方法/内部类型必要),以便在更改这些要求(通过修改模板定义)时收到列表通知,那将是很好的该模板正在使用且不再符合它的类的数量(应更新)。请注意,如果它只是重​​命名类型/方法,您可能希望自动传播更改,只要它不会破坏其他任何内容。

祝你好运...

于 2010-11-18T13:25:55.370 回答
1

我希望支持的一种重构实际上是注入方法。或多或少与提取方法相反。

因为也许我发现我可以重新排列生成的代码,以提高清晰度或效果;但我不知道目前有对此的工具支持。

于 2010-11-18T13:31:33.420 回答
0

嗨,我使用http://www.devexpress.com/Products/Visual_Studio_Add-in/RefactorCPP/这个工具我重命名变量/类/方法,更改函数体,初始化程序

于 2010-11-18T11:18:21.200 回答