我正在将一些 C++ 代码从结构迁移到类。
我主要使用结构来进行不再需要的位域优化(我现在更担心速度而不是节省空间)。
- 进行此迁移的一般准则是什么?我仍处于计划阶段,因为这是一个影响代码主要部分的非常大的举措。我想在做之前先计划好一切。 我应该记住哪些重要事项?
我正在将一些 C++ 代码从结构迁移到类。
我主要使用结构来进行不再需要的位域优化(我现在更担心速度而不是节省空间)。
在将遗留代码库从 C 更新到 C++ 时,我的经验是,实际上重新架构应用程序以将结构转换为传统 C++ 对象所涉及的价值非常小,而且完全付出了太多努力。因为别搞错了,这就是你最终会做的事情。起初看起来并不像,但最终您会意识到您正在重新设计应用程序。
您没有充分说明您的目标是什么,所以也许这就是您的目标,但是如果您只是想转换为 C++,以便您的应用程序中的新代码可以是 C++,只需重命名文件,添加一堆演员表之前发生过从 void* 进行的隐式转换,然后继续你的生活。
我不能说出所有基本的东西,但我可以说出一个:封装。
C++ 中结构和类之间唯一的技术区别是默认访问。在结构中,默认情况下所有内容都是公开的;在课堂上,一切都是私人的。我假设您在这里谈论的是 POD 结构,其中所有内容都是公开的。
我要做的是:
struct
将关键字更改为class
并查看调用代码中断的位置。这将为您提供有关在何处使用类型的哪些部分的线索。C++ 中的结构和类之间没有有意义的区别(它们仅在默认可见性上有所不同)。除非您还要添加有意义的行为,否则我不会费心将结构迁移到类。
首先,我将和其他人一起说将所有代码从结构移到类可能不是最好的移动。如果你做得好(也就是说,不仅仅是struct X {
用改变class X { public:
),那就意味着重新设计应用程序(或多或少完全重写)。
这包括引入新的错误、新的开发周期、额外的测试、更改文档等等。
其次,考虑到您可能有正当理由这样做(对我来说“只是为了好玩”和“看看我能不能做到”在某些情况下可能是正当理由:D)这是我对您问题的回答:
1. What are the general guidelines for doing this migration?
2. What are all the essential things I should keep in mind?
指南和注意事项:
在非常小的迭代中工作,并确保应用程序在迭代之间正常运行。如果您定义了单元测试,您可以按照自己的方式完成它们(选择一个单元,按照一组步骤重新设计(见下文),然后调整并运行测试。
选择您的代码的一个区域并完成它。
尝试对每个更改执行以下步骤:
如果您目前不这样做,请开始使用分支源代码控制软件。没有什么比这更有效了。我推荐 Mercurial,但我知道 GIT 具有大致相同的功能。你可以稍后感谢我:o)。
以事务方式执行更改(从一个区域开始并完成它,而不添加来自其他区域的更改,而第一个区域的更改进行到一半)。如果您使用分支源代码控制和多个开发人员,您可以一次对每个开发人员进行一个更改/区域,然后集中更改。
重构方法的优点:
如果您在中途决定努力不值得(或者如果管理层认为努力不值得),应用程序将保持功能
应用程序的稳定性仍然可以通过更改进行管理
如果你建立了一些里程碑,这应该是很容易管理的。
祝你好运!