我一直在研究“较新”的 C++ 标准(C++11 和 C++14)的一些特性,这让我开始思考一些事情。我目前正在为我的项目使用 VC++2008 编译器(出于各种原因),这意味着我可以访问的最新标准是 C++03,加上 TR1。 TR1 中有一些不错的东西,但 C++11 和 C++14 中的一些特性如果有的话就更好了。
我的问题是:是否有任何方法可以使用较新的编译器(例如 MSVC2012 或 2013)构建一些代码,以使用较新的 C++11 和 C++14 功能构建库或 DLL,然后链接将其添加到我运行 '08 编译器的项目中?
我能想到的唯一行不通的地方是我必须在我的 '08 编译器项目包含的 header 中具有 C++11 或 C++14 功能的任何地方。然而,只要所有"new"东西都隐藏在我的界面后面,这不就可以了吗?
最佳答案
是的,但它会变得丑陋..因为 ABI 不兼容,你必须深入到“extern "C"{}
”ABIness。
这意味着您根本无法传递 C++ 对象.. 就像我说的,很痛苦。这也意味着它必须是一个 DLL,因为您无法将静态库链接到另一个 ABI。
是否值得在 C API 中包装一个 DLL 是否只是为了使用一些新功能,这取决于您,不过我建议只升级整个项目。
我差点忘了,您可能也无法链接导入库,因此您必须有一些使用 LoadLibrary
、GetProcAddress
和 的代码FreeLibrary
(我有没有提到这很丑陋/痛苦?)。
关于C++ 使用较新编译器的功能生成代码以供较旧编译器使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27912018/