C++ 使用较新编译器的功能生成代码以供较旧编译器使用

标签 c++ visual-c++ c++11 c++14 c++03

我一直在研究“较新”的 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 是否只是为了使用一些新功能,这取决于您,不过我建议只升级整个项目。

我差点忘了,您可能也无法链接导入库,因此您必须有一些使用 LoadLibraryGetProcAddress 的代码FreeLibrary(我有没有提到这很丑陋/痛苦?)。

关于C++ 使用较新编译器的功能生成代码以供较旧编译器使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27912018/

相关文章:

c++ - 为指向其他对象的指针的成员编写 C++ Setters 的正确方法是什么,这样就不会有内存泄漏或崩溃?

c++ - 如何将数组传递给函数?使用 C++ 作为 OO 类

c++ - 如何禁用更改 Unicode 或 ASCII 函数名称的 MFC 宏

c++ - C++ 中的函数式编程。实现 f(a)(b)(c)

C++11 `T&&` 参数丢失其 `&&` 正确术语?

c++ - std::string 在不应该的时候通过了 std::is_fundamental 检查 - 模板元编程

c++ -/usr/local/lib 中缺少符号链接(symbolic link)

windows - 如何在 Windows 中以编程方式切换用户

windows - 如果我调用 GlobalLock(),然后未能调用 GlobalUnlock(),会发生什么情况?

c++ - C++中的智能数据结构可保存数据以加快访问速度