3

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

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

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

4 回答 4

4

在将遗留代码库从 C 更新到 C++ 时,我的经验是,实际上重新架构应用程序以将结构转换为传统 C++ 对象所涉及的价值非常小,而且完全付出了太多努力。因为别搞错了,这就是你最终会做的事情。起初看起来并不像,但最终您会意识到您正在重新设计应用程序。

您没有充分说明您的目标是什么,所以也许这就是您的目标,但是如果您只是想转换为 C++,以便您的应用程序中的新代码可以是 C++,只需重命名文件,添加一堆演员表之前发生过从 void* 进行的隐式转换,然后继续你的生活。

于 2010-05-07T06:43:19.573 回答
4

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

C++ 中结构和类之间唯一的技术区别是默认访问。在结构中,默认情况下所有内容都是公开的;在课堂上,一切都是私人的。我假设您在这里谈论的是 POD 结构,其中所有内容都是公开的。

我要做的是:

  1. struct将关键字更改为class并查看调用代码中断的位置。这将为您提供有关在何处使用类型的哪些部分的线索。
  2. 由此,确定类型的哪些元素应该是公共的,哪些应该是私有的。
  3. 为公共部分编写访问器函数,并更改调用代码以使用它们。
  4. 将需要访问私有部分的代码移到类本身中。
于 2010-05-07T06:25:10.737 回答
1

C++ 中的结构和类之间没有有意义的区别(它们仅在默认可见性上有所不同)。除非您还要添加有意义的行为,否则我不会费心将结构迁移到类。

于 2010-05-07T06:22:01.820 回答
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)。

  • 以事务方式执行更改(从一个区域开始并完成它,而不添加来自其他区域的更改,而第一个区域的更改进行到一半)。如果您使用分支源代码控制和多个开发人员,您可以一次对每个开发人员进行一个更改/区域,然后集中更改。

重构方法的优点:

  • 如果您在中途决定努力不值得(或者如果管理层认为努力不值得),应用程序将保持功能

  • 应用程序的稳定性仍然可以通过更改进行管理

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

祝你好运!

于 2010-05-07T11:11:19.847 回答