繁体   English   中英

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

[英]migrating C++ code from structures to classes

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

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

  • 执行此迁移的一般准则是什么? 我仍处于计划阶段,因为这是影响代码主要部分的一个非常大的举动。 我想在做之前先计划好一切。 我应该记住的所有重要事项是什么?

我不能说出所有基本的东西,但我可以说出一个: 封装

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

我会做的是:

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

在将遗留代码库从C更新到C ++时,我的经验是,实际重新架构应用程序以将结构转换为传统的C ++对象时,实际上没有太大的价值和太多的努力。 因为毫无疑问,这就是你最终会做的事情。 起初它似乎不会,但最终你会意识到你正在重新设计应用程序。

你没有说明你的目标是什么,所以也许这是你的目标,但如果你只是想转换为C ++,那么你的app中的新代码可以是C ++,只需重命名文件,添加一堆强制转换来自void *的隐式转换发生在之前,并继续你的生活。

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

首先 ,我将加入其他人并说将所有代码从结构转移到类可能不是最好的举措。 如果你做得好(也就是说,不仅仅是更改struct X { with 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 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM