【问题标题】:How to compile a C++03 project that uses a C++11 library API?如何编译使用 C++11 库 API 的 C++03 项目?
【发布时间】:2017-08-14 15:32:51
【问题描述】:

我需要使用共享库 A 及其使用 C++11 编译的 API。它在其 API 中使用了 C++11 功能,例如 std::mutex 和 std::shared_ptr。我无法控制库 A。

但是,我还需要使用使用库 A 的 API 的 C++03 编译我的代码。

我很确定这无法完成,因为我收到编译器错误,指出在 API 中找不到 std::mutex、std::shared_ptr 和其他人的使用。 (我的理解是,如果库 A 不使用 C++11 特定类型,那么我应该能够做到这一点。)

但我只是想确保没有什么我不理解的事情需要我做才能针对 C++11 库 A 编译我的代码。

所以问题是,我可以使用 C++03 针对共享库及其使用 C++11 的 API 编译我的代码吗?

【问题讨论】:

    标签: c++ c++11 compiler-errors c++03


    【解决方案1】:

    在其边缘公开任何 C++11 特定功能的 API 将无法在 C++03 中使用。解决此问题的一种方法是为库构建一个 C++11 包装器,它将所有 C++11 特定的输入和输出转换为与 C++03 兼容的类型。例如,如果原始 C++11 库从其 API 返回 std::shared_ptr,则包装库可以返回 boost::shared_ptr 或原始指针。在实现包装器时,“Pimpl”习语可能会有所帮助,例如如果您需要为智能指针制作包装器,但根本不允许您的应用程序代码看到std::shared_ptr。

    但必须提出一个问题:为什么不为现有代码启用 C++11?

    【讨论】:

    • John,我很想为我现有的代码启用 C++11。但是负责人要求我的代码只能是C++03。另一方面,他们也要求我使用这个库。 (是的,这是双重标准,是的,这很令人沮丧。)感谢您的意见,这有助于我了解我需要做什么。
    猜你喜欢
    • 1970-01-01
    • 2013-04-07
    • 1970-01-01
    • 1970-01-01
    • 2016-01-29
    • 1970-01-01
    • 1970-01-01
    • 2016-02-28
    • 1970-01-01
    相关资源
    最近更新 更多