我正在将一些C++代码从结构迁移到类。将C++代码从结构迁移到类
我使用的结构主要是位字段优化,我不再需要它了(我现在比节省空间更担心速度)。
- 执行此迁移的一般准则是什么?我仍然处于规划阶段,因为这是影响大部分代码的重大举措。在做之前我想先计划一切。 我应该牢记的是什么?
我正在将一些C++代码从结构迁移到类。将C++代码从结构迁移到类
我使用的结构主要是位字段优化,我不再需要它了(我现在比节省空间更担心速度)。
我无法命名全部必不可少的东西,但我可以命名一个:封装。
结构和类之间的C++唯一的技术差异是默认访问。在一个结构中,默认情况下一切都是公共的;在一堂课中,一切都是私密的。我假设你在这里谈论POD结构,一切都是公开的。
我会做的是这样的:
struct
关键字class
,看看调用代码休息。这会给你一个线索,说明在哪里使用哪种类型的部件。C++中的结构和类之间没有明显的区别(它们仅在默认可见性方面有所不同)。除非你还要添加有意义的行为,否则我不会费心将这些结构迁移到类中。
@Mystagogue:增加“有意义的行为”是计划的一部分。 – Lazer 2010-05-07 06:23:59
@eSKay:对你来说可能并不重要,但是:在C中,一个空的结构的大小为0.在C++中,一个空的结构/类的大小为1. – jweyrich 2010-05-07 06:31:15
@jweyrich:哇! [C](http://codepad.org/XKyHtIZN#output)vs [C++](http://codepad.org/kI0V6Xjw#output)!从来不知道这一点从来不必使用空的结构。感谢您指出!找到一些解释[这里](http://stackoverflow.com/questions/621616)。 – Lazer 2010-05-16 05:15:27
当更新从C到C++遗留代码库,我的经验是有很少的价值,完全是太多精力参与实际重新构建你的应用程序结构转换成传统的C++对象。因为不要犯错,那就是你最终会做的事情。它一开始似乎不是,但最终你会意识到你正在重新设计应用程序。
对于你的目标是什么都没有说,所以也许这是你的目标,但是如果你只是想转换为C++,那么你的应用程序中的新代码可以是C++,只需重命名文件,添加一群来自void *的隐式转换在之前发生,并继续你的生活。
第一个,我会加入其他人,并说将所有代码从结构移动到类可能不是最好的举措。如果你做得很好(也就是说,不仅仅是改变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)。
以事务方式执行更改(从一个区域开始并完成它,而没有添加其他区域的更改,而第一个区域的更改为半途)。如果您使用分支源代码控制和多个开发人员,则每次只能为每个开发人员更改一个区域,然后集中这些更改。一个重构方法的
优点:
应用保持功能,如果你通过决定中途的努力是不值得的(或者如果管理层决定的努力是不值得)
的应用程序的稳定性通过变化仍然可控
如果你建立了一些里程碑,这应该是相当易于管理的。
祝你好运!
为什么? 'class' =='struct'。只要保持结构并添加行为。顺便说一下,这意味着类也可以包含位字段。 – 2010-05-07 11:19:56