如何编译使用 C++11 库的 C++03 项目 API?
How to compile a C++03 project that uses a C++11 library API?
我需要使用共享库 A 及其使用 C++11 编译的 API。它在 API 中使用了 C++11 特性,例如 std::mutex
和 std::shared_ptr
。我无法控制库 A.
但是,我还被要求使用 C++03 编译我的代码,它使用库 A 的 API。
我很确定这无法完成,因为我收到编译器错误,指出未找到 std::mutex
、std::shared_ptr
和 API 中的其他用法。 (我的理解是,如果库 A 不使用 C++11 特定类型,那么我应该能够做到这一点。)
但我只是想确保没有我不理解的事情需要做才能针对 C++11 库 A 编译我的代码。
所以问题是,我可以使用 C++03 针对共享库及其使用 C++11 的 API 编译我的代码吗?
一个 API 在其边缘 公开的 任何特定于 C++11 的功能在 C++03 中将无法使用。解决此问题的一种方法是为库构建一个 C++11 包装器,它将所有 C++11 特定的输入和输出转换为 C++03 兼容类型。例如,如果原始 C++11 库 return 是其 API 的 std::shared_ptr
,则包装器库可以 return 为 boost::shared_ptr
或原始指针。 "Pimpl" 习语在实现包装器时可能会有所帮助,例如如果您需要为智能指针制作包装器,但根本不允许您的应用程序代码看到 std::shared_ptr
。
但必须要问的问题是:为什么不为现有代码启用 C++11?
我需要使用共享库 A 及其使用 C++11 编译的 API。它在 API 中使用了 C++11 特性,例如 std::mutex
和 std::shared_ptr
。我无法控制库 A.
但是,我还被要求使用 C++03 编译我的代码,它使用库 A 的 API。
我很确定这无法完成,因为我收到编译器错误,指出未找到 std::mutex
、std::shared_ptr
和 API 中的其他用法。 (我的理解是,如果库 A 不使用 C++11 特定类型,那么我应该能够做到这一点。)
但我只是想确保没有我不理解的事情需要做才能针对 C++11 库 A 编译我的代码。
所以问题是,我可以使用 C++03 针对共享库及其使用 C++11 的 API 编译我的代码吗?
一个 API 在其边缘 公开的 任何特定于 C++11 的功能在 C++03 中将无法使用。解决此问题的一种方法是为库构建一个 C++11 包装器,它将所有 C++11 特定的输入和输出转换为 C++03 兼容类型。例如,如果原始 C++11 库 return 是其 API 的 std::shared_ptr
,则包装器库可以 return 为 boost::shared_ptr
或原始指针。 "Pimpl" 习语在实现包装器时可能会有所帮助,例如如果您需要为智能指针制作包装器,但根本不允许您的应用程序代码看到 std::shared_ptr
。
但必须要问的问题是:为什么不为现有代码启用 C++11?