QtCreator:我如何注册;凌驾;及;“最后的”;作为关键词? C++ 11(或C++ 0x)将C++的重写和最终关键字引入。很棒的东西,我们会用它们来改进我们的代码。但是,尽管MS Visual C++2010编译器可以完美地处理关键字,但QtCreator(我选择的IDE)却完全被它们弄糊涂了。重写方法被标记为错误,更糟糕的是,所有代码导航功能或符号代码搜索都被完全破坏了(

QtCreator:我如何注册;凌驾;及;“最后的”;作为关键词? C++ 11(或C++ 0x)将C++的重写和最终关键字引入。很棒的东西,我们会用它们来改进我们的代码。但是,尽管MS Visual C++2010编译器可以完美地处理关键字,但QtCreator(我选择的IDE)却完全被它们弄糊涂了。重写方法被标记为错误,更糟糕的是,所有代码导航功能或符号代码搜索都被完全破坏了(,c++,qt-creator,keyword,C++,Qt Creator,Keyword,我的问题到此为止。我的问题如上所述:我如何教QtCreator将override和final识别为关键字 谢谢! --罗宾 PS:我使用QtCreator 2.3,最新的稳定版本AFAIK。编译器是MSVC2010。我想你需要等到他们发布它才能支持C++11。重新编译它不是一个好的选择,因为你需要处理所有的事情(词法、符号表)通过引入两个新关键字来更改语言语法。\ifdef\uu GNUC__ #ifdef __GNUC__ #if __GNUC__*100 + __GNUC_MINOR__

我的问题到此为止。我的问题如上所述:我如何教QtCreator将override和final识别为关键字

谢谢! --罗宾


PS:我使用QtCreator 2.3,最新的稳定版本AFAIK。编译器是MSVC2010。

我想你需要等到他们发布它才能支持C++11。重新编译它不是一个好的选择,因为你需要处理所有的事情(词法、符号表)通过引入两个新关键字来更改语言语法。

\ifdef\uu GNUC__
#ifdef __GNUC__
 #if __GNUC__*100 + __GNUC_MINOR__ < 40700
  #define override
  #define final
 #endif //GCC version
#else //defined GNUC
 #ifdef _MSC_VER
  #if _MSC_VER < 1600
   #define override
   #define final
  #else //MS version
   #error "UNKNOWN COMPILER"
  #endif //MS version
 #endif //MS defined
#endif //defined GNUC
#如果小于40700 #定义覆盖 #定义最终版本 #endif//GCC版本 #else//定义的GNUC #ifdef硕士学位 #如果MSC版本<1600 #定义覆盖 #定义最终版本 #else//MS版本 #错误“未知编译器” #endif//MS版本 #endif//MS已定义 #endif//定义的GNUC
这将导致它完全忽略这两个词

您可以这样做:

#if __cplusplus < 201103L
    #define override
#endif
\if\uu cplusplus<201103L
#定义覆盖
#恩迪夫

然后,您必须确保以C++-11模式(在GCC中为“-std=C++11”)编译然后,您可以在任何地方都包含这种类型的头。使用一些精心编制的宏,您可以确保您的代码也使用较旧的编译器生成。除非您完全依赖某个特定的功能,而该功能是无法“如果”删除的。

并且您指定了MSVC编译器。给我一个可以修复语法突出显示的部分,但您必须把它放在任何地方,这是一件痛苦的事。是的,问题是它实际上扼杀了你从使用override和final中获得的任何好处:编译器不再处理它们,也不会警告我错误。虽然这与我现在正在做的非常接近,但我把它全部放在了
#ifdef DEBUG
…哦,我误读了这个问题编译器正在正确地处理它们,但是IDE没有。这是一个完全不同的问题。我不知道答案是什么。这不是很正确。例如,你可以对一些遗留代码使用带有现代gcc的
-std=c++03
。如果这些遗留代码使用了你漂亮的现代跨版本头,那么所有这些都将以I结尾n眼泪。也许可以在gcc>4.7中测试
\uuu cplusplus
的值?是的,为QtCreator编写补丁不是我想做的。因此,这不是我想要的答案,但仍然是答案。;-)