c++ - 处理相似代码的优雅方式

标签 c++ git code-organization pragma

我有一个运行良好的软件项目。 现在,必须调整该项目以模拟一个新的但相关的系统。 有什么策略可以使这两个代码井井有条? 他们将拥有大约 90% 相同的代码库,但有许多功能需要稍作调整。

我想到了以下几点:

  1. git-repository 中的不同分支:两个项目的完美控制,但必须分别在每个分支中进行公共(public)更改。
  2. 通过 C++ 编译指示(#ifdef Project1 ...)对不同的程序模式进行建模: 这会将更改保留在本地,但会使代码难以阅读。

我对这些解决方案不太满意。有没有更好的方法?

最佳答案

我们有同样的问题,这是我们如何解决的:

  • 我们的 git 仓库中只有一个分支
  • 除了普通文件外,我们根据配置还有不同的文件:access_for_config1.cpp, access_for_config2.cpp, ...
  • 我们使用像工厂这样的设计模式来为通用部分抽象特定部分
  • 对于常见文件中非常小的特定部分,我们根据配置有一个#ifdef部分
  • 根据每个配置,我们在 makefile 中有不同的规则:对于一个配置,我们编译普通文件 + 特定文件并设置正确的标志。此外,在办公室使用 eclipse,我们还定义了不同的构建配置,以允许正确突出显示。

这种方法的优点是使公共(public)部分始终保持同步,并且我们正确地隔离了每个特定部分。

但是,您必须小心每个配置中的 not so far 代码。例如,在不同的特定文件中使用相似(但不相同)的代码,可能的错误只能在一种配置中得到纠正。可以通过将一些代码定义为公共(public)模板或重新考虑设计以将某些部分放在公共(public)模板中来减少它

希望回答对你有帮助

关于c++ - 处理相似代码的优雅方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36203530/

相关文章:

linux - 如何在删除 .git 文件夹后 "read-only"- 恢复本地 GIT 存储库和文件引用?

git - 我怎样才能重新启动 git bash?

Java 分包而不公开分包类

android - 组织 Android 代码的最佳实践

c++ - 如何在 Mac 中将纹理 .jpg 图像用于 openGL 背景窗口?

c++ - 只允许特定的 `typedef` 作为函数参数

c++ - recv() 没有收到预期的字节数

git - 使用 Jenkinsfile 一个分支中的多个管道

c++ - 处理 'Non-blocking'套接字连接

python - 创建一组 Python 类