首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++11升级技术

C++11升级技术
EN

Stack Overflow用户
提问于 2012-05-12 18:34:58
回答 2查看 776关注 0票数 3

我想开始在一个大型的跨平台代码库中使用C++11。主要问题是所使用的编译器之间的C++11支持级别不同。

除了在整个代码中乱扔宏之外,有没有人有关于如何简化这种转换的示例/建议?请提供特定功能的技术。例如:

代码语言:javascript
复制
// cpp11compat.h

// For compilers that do not have 'nullptr', we will define it as 'NULL'.
// Any misuses of 'nullptr' will be caught by C++11 compliant compilers.
// Obviously, this won't fix anything that depends on the type 'nullptr_t'
//
#ifdef STUPID_SUN_COMPILER
#define nullptr NULL
#endif

有什么想法?

EN

回答 2

Stack Overflow用户

发布于 2012-05-12 19:07:35

我建议您从当前编译器找到C++11特性的最大公分母开始。有关调查,请参阅:http://wiki.apache.org/stdcxx/C%2B%2B0xCompilerSupport最受支持的特性包括autodecltype和move语义,因此您可以从使用这些特性重新编写代码开始,并对不支持大多数其他平台支持的特定功能的平台(例如nullptr)进行#define修复。

对于所有配置文件的文件组织,您可能需要检查Boost.Config的源代码--它包含按平台和用途排序的几个目录。例如config/ platform /irix.hpp包含所有特定于Irix的平台内容。

编辑:模拟语言特性的另一个好方法是查看语言特征仿真标记的Boost库。它们包含像Move、Foreach和以前的Lambda这样的库,它们的语法与标准的C++11特性非常相似(尽管不一定完全相同)。这允许您让Boost担心平台兼容性。

票数 1
EN

Stack Overflow用户

发布于 2012-05-12 20:03:04

自该标准公布以来,几乎没有时间过去。虽然您可能可以通过boost实现几乎所有的C++11特性,但除非您已经走上了这条道路,否则今年可能不是启动这种迁移的最佳时机,因为这将导致迁移两次。

因此,我建议您在开始迁移之前再给编译器供应商一年或两年的时间。同时,如果您觉得C++11在整个代码库中对您非常重要,那么尝试停止支持任何可能不会出现更新编译器的废弃平台。

(事实上,永远不要将一个大型代码基迁移到语言标准的下一个版本是非常好和常见的,但这与您的问题与它当前的措辞方式无关。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10566389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档