草庐IT

Refactoring

全部标签

c++ - 如何更新项目中的所有 C/C++ 标识符名称

在经常遇到不要在C/C++标识符中使用前导和双下划线的建议后,我决定一劳永逸地修复所有源代码。我现在需要做的是将_Identifier转换为Identifier_。我应该使用专门的工具来完成正则表达式的任务吗?在后一种情况下,匹配C/C++标识符的模式是什么? 最佳答案 虽然我是经常指出带有前导下划线的名称可能被保留的人之一,但我强烈建议您不要这样做,除非您遇到由名称引起的问题。进行此全局更改将使您的版本控制系统的用处降低,否则会导致各种虚假差异。此外,还有可能创建重复的名称。此外,还有许多完全有效的下划线前缀名称。人们会立即想到_

C++ 重构 - 将方法移动到实现文件

我有很多头文件,里面有很长的方法实现。是否有自动执行此操作的方法?一个接一个会花很多时间...谢谢。 最佳答案 如果您使用的是VisualStudio,则有一个名为VisualAssist的插件可以帮助您做到这一点。我在工作中使用它,它真的很有帮助。很遗憾,此插件不是免费的,但您可以安装试用版来执行您的操作并对其进行测试。 关于C++重构-将方法移动到实现文件,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.

C++ 目录重组

我在大约10个目录中有大约500个文件的源代码。我需要重构目录结构——这包括更改目录层次结构或重命名某些目录。我正在使用svn版本控制。重构的方式有两种:一种是保留svn历史(使用svnmove命令),另一种是不保留。我认为使用eclipseCDT和SVN插件重构保留svn历史要容易得多(visualstudio根本不适合目录重组)。但现在由于代码尚未发布,我们可以选择不保留历史记录。仍然存在更改头文件包含指令的任务。我正在考虑使用python编写一个小脚本——接收从当前文件名到新文件名的映射,并在需要的地方进行重命名(使用类似sed的东西)。有没有人做过这种目录重构?你知道好的相关工

c++ - 在现代 C++ 中使用非智能指针

简短版本:在现代C++中使用非智能指针有什么可以接受的理由吗?长版:我们有一个包含大量旧C++代码的庞大产品,现在我们正试图将其重构为现代C++时代。除了所有老式代码外,还有大量指针在传递(大多数带有SAL注释以提供某种安全感),我想知道我们是否应该将它们全部更改为智能指针,或者保留其中一些?在尝试转换其中一些代码时,我最终得到了一个可以过度使用智能指针的代码。所以问题是:是否存在过度使用智能指针这样的事情?或者换句话说:现在是否有非智能指针可以接受的场景? 最佳答案 智能指针(unique_ptr和shared_ptr)应该是OW

c++ - 在容器元素上应用函数需要更好的名称

我有一个容器类(包含一个多索引容器),我有一个公共(public)的“foreach”成员函数,因此用户可以传递一个仿函数以应用于所有元素。在实现时,我遇到了这样一种情况,即仿函数只能应用于容器中范围内的某些元素,因此我重载了foreach,以传递一些有效范围。现在,在某些情况下,在某个条件下停止是值得的,所以实际上,我让foreach根据函数的返回值停止。我对系统的工作方式很满意,但我有一个顾虑:应该如何调用范围内带有停止条件的“foreach”?谁知道一个通​​用、清晰和简洁的名称? 最佳答案 根据您的描述,我会选择apply_

C++ 压缩嵌套 for 循环

我有这些for循环。//outputallpossiblecombinationsfor(inti1=0;i1它看起来很糟糕,但我是一个新手,不知道从哪里开始压缩它们。谁能给我一两个指点,这样我就可以让这段代码更整洁一些? 最佳答案 您在七个级别上为0、1和2编制索引。这可能不是很有效,但是这样怎么样:inti1,i2,i3,i4,i5,i6,i7;intj;for(inti=0;i或者,根据user315052在评论中的建议:intd[7];for(inti=0;i=0;j--){d[j]=num%3;num=num/3;}//p

c++ - 用于 C/C++ 剽窃检测的变量重命名

我有几个简单的C++家庭作业,我知道学生共享代码。这些都是聪明的学生,他们知道如何欺骗莫斯。我正在寻找一种可以根据变量类型重命名变量的工具(第一个int类型的变量将是int1,第一个int数组将是intptr1...),或者做一些我现在想不到的类似事情。你知道一个快速的方法吗?编辑:我需要使用moss并报告90%匹配谢谢 最佳答案 是的,您正在寻找的工具称为编译器。:)说真的,如果提交的程序除了标识符名称外完全相同,那么编译(没有调试信息)应该会产生完全相同的输出。p>如果您在打开调试的情况下执行此操作,编译器可能会在可执行文件中留

c++ - 如何将 boost::shared_ptr 引入现有(大型)C++ 代码库?

我目前正尝试通过引入智能指针的使用来修复我们代码库中的一些弱点。代码库非常庞大,并且相互关联,就像一只喝过一对多咖啡的蜘蛛。我想知道以前是否有人尝试过,他们的方法是什么。我的第一步是typedef类,如下所示。#ifndefUSE_SMART_POINTERS#defineUSE_SMART_POINTERS0#endif#ifUSE_SMART_POINTERS==1#include#endifnamespaceProductX{//forwarddeclerationclassCTObject;//typedefs#ifUSE_SMART_POINTERS==1typedefboo

ios - 是否可以在 Xcode 中重构 Objective-C++ 代码

我是一名游戏开发者。我已经开发了一款使用box2d的游戏,该游戏处于最后阶段。为了在我尝试进行代码重构时构建代码,我收到此错误警报http://screencast.com/t/ir1nCvnx.但是,当我尝试为另一个未使用.mm后缀的项目进行代码重构时,我可以成功。我想知道的是我们可以使用C++概念对代码进行代码重构。如果不是,还有什么其他方法可以进行代码重构。 最佳答案 IthoughtbecauseXcodedependedontheclangfrontendforallofitscodecoveragefeatures,th

php - 你如何重构旧的PHP代码?

我最近参与了一个项目,一个基于web的游戏使用php编写的引擎。游戏运行良好,但可能更健壮,并有更多的功能-和代码都是旧的和相当丑陋。这段代码(以及我怀疑的大多数php代码)的问题是,它已经发展到了现在的位置,而且结构也不是很好,有很多几乎相同的代码片段,并且在涉及函数的地方也大量使用globals。当然,任何地方都没有一个单元测试,而且代码是硬编码的,以使用特定的数据库,并且依赖于调用代码的网页中的$u请求字符串。正确的做法是将代码片段作为子函数提取出来,整理它们并添加一些单元测试以确保它继续工作,同时添加一些模拟对象。然而,完全手工完成这项工作是乏味和容易出错的,我想知道你是如何做