2017-08-14 91 views
1

我需要使用共享库A及其使用C++ 11编译的API。它在其API中使用了C++ 11功能,如std::mutexstd::shared_ptr。我无法控制库A.如何编译使用C++ 11库API的C++ 03项目?

但是,我也被要求使用C++ 03编译我的代码,它使用库A的API。

我非常确定这不能完成,因为我得到编译器错误,指出在API中找不到std::mutexstd::shared_ptr和其他的使用。 (我的理解是,如果库A没有使用C++ 11特定类型,那么我应该可以做到这一点。)

但我只是想确保没有什么我不明白我需要做的是为了编译我的代码对C + + 11库A.

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

回答

1

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

但是这个问题必须被问到:为什么不只是为现有的代码启用C++ 11?

+0

John,我很乐意为我现有的代码启用C++ 11。但负责人要求我的代码只能是C++ 03。另一方面,他们也要求我使用这个库。 (是的,这是一个双重标准,是的,这是非常令人沮丧的。)我感谢你的意见,这有助于我理解我需要做什么。 – Fred