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

我主要使用的结构主要进行位田的优化,而我不再需要的(我更担心速度比现在节省空间)。

  • 进行此迁移的一般准则是什么? 我仍处于计划阶段,因为这是影响代码主要部分的一个很大的举动。我想先计划所有事情,然后再做。 我应该牢记的所有基本事情是什么?
有帮助吗?

解决方案

我不能命名 全部 必不可少的事情,但我可以说一个: 封装.

结构和类之间C ++的唯一技术差异是默认访问。在结构中,默认情况下一切都是公开的。在课堂上,一切都是私人的。我假设您在这里谈论的是Pod Structs,一切都是公开的。

我要做的是:

  1. 更改 struct 关键字到 class 并查看呼叫代码中断的位置。这将为您提供有关该类型的哪些部分在哪里使用的线索。
  2. 由此,确定该类型的哪些要素应该是公开的,应该是私人的。
  3. 为公共部件编写登录功能,然后更改通话代码以使用它们。
  4. 将需要私人零件访问的代码移动到课程本身。

其他提示

当将旧版代码库从C更新为C ++时,我的经验是,实际上几乎没有价值,并且实际上涉及的努力实际上涉及您的应用程序以将结构转换为传统的C ++对象。因为没错,那就是您最终会做的。一开始似乎不会,但是最终您会意识到自己正在重新设计应用程序。

您对目标的说法还不够说,所以也许这是您的目标,但是如果您只是想转换为C ++,那么您的应用程序中的新代码可以是C ++,只重命名文件,添加一堆演员从void*发生的隐性转换之前,并继续前进。

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)。

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

重构方法的优势:

  • 如果您决定一半的努力是不值得的(或者管理层决定不值得的,则该申请保持功能

  • 应用程序的稳定性通过更改仍然可以控制

如果您建立了一些里程碑,那么这应该非常易于管理。

祝你好运!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top