【问题标题】:Strategy of converting code from C++11 to C++98?将代码从 C++11 转换为 C++98 的策略?
【发布时间】:2020-04-16 09:42:26
【问题描述】:

我有一个用 C++11 编写的项目。由于 C++11 被广泛接受,该项目到目前为止运行良好,直到我不得不在不支持 C++11 的环境中运行它。

我已经在项目中到处使用std::shared_ptr、auto、std::intializer_list、nullptrenum class、chrono、std::vector<int> x{1,2,3,4} 和许多其他 C++11 技术。

如何将 C++11 中的大项目迁移到 C++98?

如果这是一个愚蠢的问题,我深表歉意,感谢您的宝贵时间。

【问题讨论】:

  • 不太可能有任何工具可以做到这一点。大量的手工工作摆在您面前。
  • 许多这些库由 Boost for C++98 提供。
  • 安装一个更新的编译器,或者如果不可能,就拒绝处理这个环境。为什么要在注定要进入回收站的东西上浪费大量精力?我知道这种解决方案并不适合所有人,但这是几种有效策略之一。
  • “必须运行”是指必须在 c++98 编译器上开发它吗?只是为了检查编译器和运行时库之间是否存在混淆。如果您需要将其移植回来以获得 c++98 的好运,可能会很困难。我宁愿尝试使用编译器反向端口或在 docker 内编译...
  • 我正在编写高性能计算应用程序的代码,我希望项目在神威太湖之光超级计算机(世界Top3计算机)上运行。不过目前还不支持C++11,管理员说不知道平台什么时候支持C++11。为了使用计算机,我必须将代码转换为 C++98。看来我必须做很多手工工作。谢谢大家的建议~@All

标签: c++ c++11 c++98


【解决方案1】:

分别决定每件作品。

如果该平台至少可以运行boost 的一个子集,您可能只需替换std::chrono 和std::shared_ptr。您也可以将 lambdas 替换为 BOOST_LOCAL_FUNCTION

【讨论】:

  • 我决定现在去看看 boost!
【解决方案2】:

我必须做类似的事情,但我的挑战是将它从 C++17 转换为 CentOS 7 上的 C(他们使用自定义 CentOS 映像,我们不允许安装任何新软件包)。

我所做的是逐步丢弃所有使用 C++ 元素的依赖项,并用 C 变体替换它们。这花了一些时间,但它奏效了。还关注了其他一些解决方案,但我找不到任何解决方案。

你总是可以用 C 重写共享指针、向量等。

【讨论】:

  • 您做得很好,先生。将 C++17 转换为 C 更难 :) 你是我的榜样,我现在就开始做~
【解决方案3】:

也许不完全是您所要求的,但是当我想在不支持 C++11 的情况下将代码运行到另一台计算机时,我将在这台计算机内使用 C++11 创建 docker。希望这会有所帮助!

【讨论】:

  • 我从来没有想过我们可以在docker中运行代码!你确实扩大了我的视野~
【解决方案4】:

一种解决方案是尝试寻找 C++ 外部库,例如 Boost 和 Qt,它们可以满足您一半的需求。

但是,有些事情是特定于实现的,取决于您,例如 auto 关键字,您可以选择不使用它。 (事实上​​,如果您使用适当的调试器和 IDE,您甚至可以检查实例中的复杂数据类型)

另一种替代方法是用模板替换auto,正如here 指出的那样。 (没有提升)

同样,宏和可变参数模板之类的内容也不难涵盖。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-03
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 2012-01-25
    • 1970-01-01
    相关资源
    最近更新 更多