我的代码库大量使用模拟的右值引用(使用Boost移动库),可变参数模板(使用Boost处理器),在某些情况下使用表达式模板.
我很想切换到C 11,以获得更清晰的代码库,使用rvalue引用,完美转发,默认和删除构造函数,可变参数模板,以及auto和decltype.
如果我这样做,我可能会对现有代码进行一些修改以简化它(使用模板别名和constexpr).在这种情况下,我必须使用mingw切换到Windows平台的gcc,因为Visual Studio没有默认和删除的实现,以及可变参数模板.另外,我必须切换到gdb作为调试器和不同的代码编辑器.
对我来说,代码简单性和性能方面的好处看起来很大,但稳定性,可用性(在某些平台上如Android),调试(从Visual Studio迁移到gdb,因为我们有许多为Visual Studio调试器开发的可视化工具)和代码编辑器(对于大量的模板代码而言,我没有太多使用自动完成,重构等,Codelite,Codeblocks,QtCreator与我们的构建系统配合良好)是一些问题.
我想知道是否有任何中型/大型项目(商业或开源)使用/打算使用上述任何C 11功能?这样的迁移需要多少努力?
任何实践经验,技巧或智慧的话语都会帮助我做出决定.
解决方法
像所有技术一样,从有效的东西转换到新的东西本身就是一种风险.根据您的思维方式和对项目的批评,您接受的风险程度可能会有所不同(例如,我在个人项目中使用Clang树版本的顶部,但在工作时使用成熟的gcc).
就个人而言,我建议不要先为生产就绪项目潜水,而是逐步选择有效的功能.
你提到:
>右值参考&完美转发
>默认/删除
>可变参数模板
>类型推断(auto / decltype)
>模板别名和constexpr
VC 11附带support for many C++11 features.例如,您现在可以开始使用右值引用和类型推断.如果我没记错的话,那些可以和gcc 4.5.x分支一起使用,已经超过一年了,非常好用.
例如,一个值得注意的缺席是lambdas,VC 11和gcc也支持它.
如果要进一步移动,则必须切换编译器和环境.由于你需要重新训练团队,所以这项工作要大得多(就我个人而言,我在gingw上遇到了一些关于gdb的瑕疵……).
我会建议樱桃选择适用于两个编译器的东西,现在,除非你觉得冒险.但迁移始终是一种商业风险.