将C ++代码从结构迁移到类

时间:2010-05-07 06:18:39

标签: c++ migration class structure code-migration

我正在将一些C ++代码从结构迁移到类。

我使用的结构主要用于比特场优化,我不再需要了(我现在更担心速度而不是节省空间)。

  • 执行此迁移的一般准则是什么?我仍然处于规划阶段,因为这是影响代码主要部分的一个非常大的举措。我想在做之前先计划好一切。 我应该记住哪些基本要素?

4 个答案:

答案 0 :(得分:4)

我无法将所有命名为基本内容,但我可以命名为:封装

struct和class之间C ++的唯一技术差异是默认访问。在结构中,默认情况下一切都是公共的;在课堂上,一切都是私密的。我假设你在谈论POD结构,一切都是公开的。

我要做的是:

  1. struct关键字更改为class,并查看调用代码中断的位置。这将为您提供关于该类型的哪些部分使用的线索。
  2. 从中确定哪种类型的元素应该是公开的,哪些元素应该是私有的。
  3. 为公共部分编写访问器函数,并更改调用代码以使用它们。
  4. 将需要访问私有部分的代码移动到类本身中。

答案 1 :(得分:4)

在将遗留代码库从C更新为C ++时,我的经验是,实际重新架构应用程序以将结构转换为传统的C ++对象时,所涉及的价值非常小,而且需要花费太多精力。因为毫无疑问,这就是你最终会做的事情。起初它似乎不会,但最终你会意识到你正在重新设计应用程序。

你没有详细说明你的目标是什么,所以这可能是你的目标,但如果你只是想转换为C ++,那么你的app中的新代码可以是C ++,只需重命名文件,添加一个一群演员之前发生了来自void *的隐含转换,并继续你的生活。

答案 2 :(得分:1)

C ++中的结构和类之间没有任何有意义的区别(它们仅在默认可见性方面有所不同)。我不打算将结构迁移到类,除非你要添加有意义的行为。

答案 3 :(得分:1)

首先,我将加入其他人并说将所有代码从结构转移到类可能不是最好的举措。如果你做得好(也就是说,不仅仅是用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)。

  • 以交易方式执行更改(从一个区域开始并完成,而不会在第一个区域的更改中途添加其他区域的更改)。如果您使用分支源代码控制和多个开发人员,则每个开发人员可以一次更改一个区域,然后集中更改。

重构方法的优点:

  • 如果您决定中途付出的努力是不值得的(或者如果管理层认为努力不值得),那么该应用程序将保持正常运行。

  • 通过更改

  • ,应用程序的稳定性仍然可以控制

如果你建立了一些里程碑,这应该是非常容易管理的。

祝你好运!