我需要使用共享库A及其使用C ++ 11编译的API。它在API中使用了{+ 1}}和OPTION(OPTIMZE FOR...)
等C ++ 11功能。我无法控制库A.
但是,我还需要使用C ++ 03编译我的代码,它使用库A的API。
我很确定无法做到这一点,因为我收到编译器错误,指出未找到API中std::mutex
,std::shared_ptr
和其他用法。 (我的理解是,如果库A没有使用C ++ 11特定类型,那么我应该能够这样做。)
但我只是想确保我没有理解我需要做的事情,以便针对C ++ 11库A编译我的代码。
所以问题是,我可以使用C ++ 03针对共享库及其使用C ++ 11的API编译我的代码吗?
答案 0 :(得分:3)
在C ++ 03中无法使用在其边缘公开 任何C ++ 11特定功能的API。解决这个问题的一种方法是为库构建一个C ++ 11包装器,它将所有特定于C ++ 11的输入和输出转换为与C ++ 03兼容的类型。例如,如果原始C ++ 11库从其API返回std::shared_ptr
,则包装器库可以返回boost::shared_ptr
或原始指针。实现包装器时,“Pimpl”习惯用法可能会有所帮助。如果你需要为智能指针创建包装器但是不能允许你的应用程序代码看到std::shared_ptr
。
但问题是:为什么不为现有代码启用C ++ 11?