gpt4 book ai didi

c++ - 如何处理一些频繁使用的库的逐步重构?

转载 作者:太空狗 更新时间:2023-10-29 21:06:39 25 4
gpt4 key购买 nike

我有几个面向多个平台的库,其中一些实时库支持/不支持 STL,更不用说 tr1 或 C++11 了。这意味着一切都使用库自己的字符串/数组/列表/younameit 类。现在这些平台正在被“纯”C++11 和 STL 所取代(对此我感到非常高兴:我做的最新库是第一个采用新标准的库,开发时间缩短了很多,而代码质量上升了)。

现在我希望新项目不依赖于自定义字符串/数组/...类,并且我计划进行逐步重构:每当我需要一些类时,创建一个拷贝(好吧不是完整的拷贝;仍然很痛,但是还有另一种选择吗?)而不是使用 STL。一开始,这可能意味着整个类树可能需要立即更改。同时,原始代码应在未来 4 年左右的时间内继续工作。

实际上我现在面临的主要问题是:我应该把这些新类放在哪里?例如

A\A.h depends on B\B.h and string.h

应该变成

a new A.h depending on a new B.h and <string>

我是否创建一个新类 NewA 并放入 A.h?或者在新的命名空间中创建一个类 A 并将其存储在 A\newA.h 中?或者我是否创建一个全新的子目录结构,如 new\A\A.hnew\B\b.h

我知道已经有几个类似的问题,答案很好,但我想要一些更实用的建议,而不是“阅读 Working Effectively with Legacy Code”。虽然这是一个有道理的好答案,但我更感兴趣的是在类似情况下实际上做了什么?

编辑一些说明:

  • 大多数当前应用程序也将及时移植到使用 STL,因为它们都将在新平台上运行(仍然怀疑 RTX 或 InTime,但其中之一)。
  • 我确实使用 VCS、git,几乎所有重要的东西都包含在单元测试中。否则这将是疯狂的。
  • 没有真正的团队,我只能靠自己(不幸的是,当涉及到这样的事情时,我不能将我的同事算作团队成员,尽管他的年龄几乎是我的两倍,但他的编程水平还不到我的一半,并且我什至没有那么熟练。

最佳答案

不要复制类。让您的旧项目运行,并将其 fork 到某个地方。当然,使用单元测试和源代码控制。

然后,我会采用深度优先的方法,一次一点。一次更改一个类以使其适应新的编码标准,并解决由此产生的所有编译器错误。这特别意味着对于您感兴趣的类,您首先要摆脱旧的 string.h,更改接口(interface)和实现(字符串/vector 类彼此没有太大区别),然后构建项目。让编译器错误告诉您下一步该去哪里。

根据项目的大小,您可以从使用最少或最常用的类开始。只有在所有其他类都已转换后,才删除未使用的字符串/vector 类。

这可能是一个非常简单(尽管很耗时)的操作(因此与重构不同),并且如果您使用具有良好合并支持的良好版本控制系统,则多个开发人员可以同时很好地处理它和单元测试。使用单元测试和版本控制。真的。

当然,你不会把你的整个代码都适配为STL和C++0x,你应该首先争取自定义字符串/容器类,并在它们该属于的地方添加智能指针。您的中期目标应该是删除整个代码库中所有出现的 delete

关于c++ - 如何处理一些频繁使用的库的逐步重构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7244471/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com