Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么是C++;您在实践中使用了哪些重构? < >我将创建现有的自动化C++重构工具的比较表,并探索自由和开源工具的创建能力。_C++_Refactoring_Automated Refactoring - Fatal编程技术网

什么是C++;您在实践中使用了哪些重构? < >我将创建现有的自动化C++重构工具的比较表,并探索自由和开源工具的创建能力。

什么是C++;您在实践中使用了哪些重构? < >我将创建现有的自动化C++重构工具的比较表,并探索自由和开源工具的创建能力。,c++,refactoring,automated-refactoring,C++,Refactoring,Automated Refactoring,我的问题是:你在日常工作中真正使用的重构是什么?有明显的事情,比如重命名变量/类/方法,但是有什么特定的C++,比如处理模板、STL、复制构造函数、初始化器等等? 我感兴趣的是C++开发人员每天在代码中所面对的所有小问题的真实图像的构建,至少在理论上是可以自动化的。我正在和同事们谈话,但这可能还不够 提前感谢。您好,我使用这个工具重命名变量/类/方法,更改函数体和初始值设定项。看看Martin Fowler和Joshua Kerievsky的作品。这些反过来又引用了GoF的书,所以也要得到它 如

我的问题是:你在日常工作中真正使用的重构是什么?有明显的事情,比如重命名变量/类/方法,但是有什么特定的C++,比如处理模板、STL、复制构造函数、初始化器等等? 我感兴趣的是C++开发人员每天在代码中所面对的所有小问题的真实图像的构建,至少在理论上是可以自动化的。我正在和同事们谈话,但这可能还不够


提前感谢。

您好,我使用这个工具重命名变量/类/方法,更改函数体和初始值设定项。

看看Martin Fowler和Joshua Kerievsky的作品。这些反过来又引用了GoF的书,所以也要得到它


如果你可以超越基本的重命名特征和提取函数,那么你可能会成为赢家。

< P>这是我昨天提出的一个C++设计模式:放弃继承来支持政策。

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

  • 重命名就是其中之一
  • 更改函数签名是另一个问题(特别是因为函数几乎必然是重复的:头中的声明和源中的实现)
  • 重命名/移动文件(更新include指令)
请注意,虽然它是基本的,但很少得到很好的处理。我的主要抱怨是评论通常不会更新(我不是在说doxygen自动生成的无用杂乱)。因此,如果我描述了类在头文件中的使用,或者在另一个源文件中使用该类的理由,那么注释现在已经过时,因为通过重命名该类,现在没有人知道它引用了什么

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

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

祝你好运…

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


因为也许我看到我可以重新排列生成的代码,使其更清晰或效果更好;但我不知道目前有工具支持。

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


VI是我知道的一种视觉辅助。

祝你在创建一个象素C++ C++解析器中使这种工具工作。我发现没有一个是真正有用的。我的建议是学习你的设计模式,读Meyer的有效C++,然后是101个编码标准。从一开始就或多或少地学会做这件事。@Daniel:重构是开发人员的主要工具,不管是什么程序。按照接吻原则,你不会为了接吻而钻研各种模式,而只是为了你此刻需要的东西而零碎地使用它们。。。吉姆:CLAN提供了一个完整的C++解析器库,实际上主要目的是提供简单的改写或源代码翻译。C++解析器很难,预处理器有助于解决这一问题。C++名称解析更难。C++流分析可能同样困难。在重构之后,您仍然必须能够重新生成C++源文本。你会发现做这一切相当困难。我第一次读到我提出放弃继承权以支持政治。亚历山德雷斯库不是在你之前提出的吗?或者你刚刚意识到政策有多好在哪里?这些都是非常基本的事情……只是重命名很难。想象一下把我改名为J。。。在I的声明和I的使用之间的范围中有一个J(“阴影”)。这包括具有多重继承的中间作用域;J甚至可能不会显式出现在实际的介入范围声明中。享受。