草庐IT

Refactoring

全部标签

c++ - 将一个包含很多类的文件转换为每个文件一个类的多个文件

如何将一个包含很多类的文件转换为每个文件一个类的多个文件?(C\C++)所以我有这样结构的文件:一些包含然后很多类有时会相互调用:#include#include//...classPG_1{//...}classPG_2{//...}//......classPG_N{//...} 最佳答案 如果你没有使用版本控制(tsktsk):备份您的整个项目以防您搞砸。将每个类剪切并粘贴到它自己的classname.h和classname.cpp文件中。将classname替换为类的名称。更新包含守卫。添加您认为每个类的依赖项所必需的#in

c++ - 在重构深度嵌套的代码时需要帮助

#includeusingnamespacestd;intmain(){intrange=20;inttotalCombinations=0;for(inti=1;ii){for(intj=1;ji){for(intk=1;kj){for(intl=1;lk){for(intm=1;ml){for(intf=1;fm){cout 最佳答案 if(range>i)为什么不从range开始i来避免这个问题呢?可以轻松地将其重构为for条件的一部分。不需要额外的条件。if(j>i)为什么不从i开始j呢?...(对其他两个循环重复)这摆脱了

c++ - 重构代码以使用 Boost 共享指针

我使用普通指针编写了一个项目,现在我受够了手动内存管理。在重构过程中可以预见到哪些问题?到目前为止,我已经花了一个小时来替换X*与shared_ptr对于我想自动管理内存的类型。然后我改了dynamic_cast至dynamic_pointer_cast.我仍然看到更多错误(与NULL相比,将this传递给函数)。我知道这个问题有点模糊和主观,但我认为我可以从已经这样做过的人的经验中受益。有没有陷阱? 最佳答案 虽然到处使用boost::shared_pointer很容易,但您应该根据所有权语义使用正确的智能指针。在大多数情况下,您

c++ - 你能不用 goto 重写这段代码吗

伙计们,我在一个遍历树的大while循环中有以下代码。这是我可以获得此例程的最快速度,但我必须使用goto。我不是从根本上反对goto,但如果我能避免它们,我愿意。(拜托,我不是要挑起一场口水战。)约束条件:current=current->child()开销很大(它是一个shared_ptr)所以我想不惜一切代价尽量减少该操作的使用。操作后current应该是它找到的最后一个child。cnt必须计算它遇到的每个child。cnt++将被一些其他操作(或多个操作)取代,并且应该只出现一次:)代码:insideloopy:cnt++;if(current->hasChild()){cu

C++ 重构 : conditional expansion and block elimination

我正在重构大量代码(主要是C++),以删除一些已永久设置为给定值的临时配置检查。因此,例如,我将有以下代码:#include#include#include...if(value1()){//dosomething}boolb=value2();if(b&&anotherCondition){//domorestuff}if(value3()对value的调用返回bool或int。因为我知道这些调用总是返回的值,所以我做了一些正则表达式替换以将调用扩展到它们的正常值://where://value1()==true//value2()==false//value3()==4//TODO

c++ - 重构 C++ 代码以使用脚本语言?

背景:几个月来,我一直在开发一款用C++编写的平台游戏。该游戏目前完全用C++编写,但我对将Lua用于敌人AI和其他一些逻辑的可能性很感兴趣。然而,该项目在设计时并没有考虑到Lua,而且我已经为大部分AI编写了可用的C++代码。我希望Lua可以提高游戏的可扩展性,但不知道将现有的C++代码转换为Lua是否有意义。问题:什么时候(如果有的话)采用功能齐全的C++代码并将其重构为脚本语言(如Lua)是否合适?这个问题故意有点模糊,所以请随意给出与给定背景无关的答案。 最佳答案 脚本语言对于可能经常更改或扩展的事物很有用,并且可以承受速度

c++ - C++ 中的单元测试

仅仅为了让一个类可测试就可以使用接口(interface)打破所有依赖关系吗?由于许多虚拟调用而不是普通方法调用,它在运行时涉及大量开销。测试驱动开发在现实世界的C++应用程序中是如何工作的?我阅读了WorkingEffectivelyWithLegacyCode并喜欢它非常有用,但没有跟上实践TDD的速度。如果我进行重构,我经常会因为大量的逻辑更改而不得不完全重写单元测试。我的代码更改经常会更改数据处理的基本逻辑。我看不出有什么方法可以编写不必在大型重构中更改的单元测试。可能有人可以向我指出一个使用TDD通过示例学习的开源C++应用程序。 最佳答案

c++ - 将基于桌面的 MFC C++ 应用程序转换为 Web 应用程序是否可行

我有一个非常大的应用程序,有150万行C++,目前基于MFC,使用文档/View架构。该应用程序包括大量3dvector图形、电子表格以及非常多的对话框和窗口。在DVA的限制下,它写得相当好,因为在用户界面中没有重要的程序逻辑,并且可以使用用户界面完成的任何事情也可以使用COM/OLE自动化接口(interface)以编程方式执行。应许多用户的要求,我一直在考虑为程序创建一个浏览器界面,程序本身在服务器上运行。到目前为止的想法是将所有COM接口(interface)转换为DCOM,并将UI重写/移植到Java。初步实验表明,这将是一项巨大的工作。还有其他人有任何更容易实现的想法吗?有没

c++ - 我如何在考虑性能的情况下重构此代码?

我有一个性能非常重要的方法(我知道过早的优化是万恶之源。我知道我应该并且我确实分析了我的代码。在这个应用程序中,我每节省十分之一秒就是一个巨大的胜利。)此方法使用不同的启发式方法来生成和返回元素。启发式算法是按顺序使用的:使用第一个启发式算法,直到它不再返回元素,然后使用第二个启发式算法,直到它不再可以返回元素,依此类推,直到使用完所有启发式算法。在每次调用该方法时,我都使用一个开关来移动到正确的启发式。这很丑陋,但效果很好。这是一些伪代码classMyClass{private:unsignedintm_step;public:MyClass():m_step(0){};ElemGe

c++ - 在 C++ 中重构一个类

我有一个类A,它实现了很多功能。A类非常稳定。现在我有一个新的功能需求,其中一些功能与A实现的功能相匹配。我不能直接从A类继承我的新类,因为那样会给我的新类带来很多冗余。那么,我应该在两个类中复制公共(public)代码吗?或者,我应该创建一个新的基类并将公共(public)代码移动到基类,并从中派生类A和新类吗?但这将导致我现有类(class)发生变化。那么,哪种方法更好? 最佳答案 除非有充分的理由不修改A类,否则重构并创建一个通用基础(或者更好的是,一个两者都可以使用但不一定派生自的通用类)。您始终可以使用私有(private