QtCreator:如何将“override”和“final”注册为关键字?

5
C++11(或C++0x)引入了“override”和“final”关键字到C ++中。非常好的东西,我们将使用它们使我们的代码更好。但是,尽管MS Visual-C ++ 2010编译器完美处理这些关键字,但QtCreator(我选择的IDE)却完全被它们搞糊涂了。 "override"方法标记为错误,并且---更糟糕的是---所有代码导航功能或符号代码搜索都被完全搞砸了。 :(
这就是我的问题。我上面的问题是:如何教QtCreator将“override”和“final”识别为关键字?
谢谢! -罗宾
PS:我使用QtCreator 2.3,最新的稳定版本AFAIK。编译器是MSVC2010。
3个回答

2
我猜你需要等到他们发布支持C++11的版本。重新编译不是一个好的选择,因为你需要通过引入两个新关键字来改变语言的语法,并处理所有的词汇和符号表。

是的,编写QtCreator的补丁不是我想做的事情。所以,这并不完全是我要找的答案,但仍然是一个答案。;-) - Robin

1
#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

这将导致它完全忽略这两个单词


你指定了MSVC编译器。给我一秒钟。 - Mooing Duck
那会修复语法高亮,但你必须在每个地方都包含它,这很麻烦。 - spraff
是的,这样做的问题在于它实际上会破坏使用_override_和_final_所获得的任何好处:编译器不再处理它们,也不会警告我错误。虽然这与我现在正在做的事情非常接近,只是我把它全部放在#ifdef DEBUG中... - Robin
哦,我误读了问题。编译器处理它们是正确的,但是IDE没有。那是一个完全不同的问题。对于这个问题,我完全不知道答案。 - Mooing Duck
这不太对。例如,您可以在现代GCC中使用“-std=c++03”来处理一些遗留代码。如果此遗留代码使用了您漂亮的现代跨版本标头,则一切都将以泪水告终。也许在GCC > 4.7中测试__cplusplus的值? - bobbogo

0
你可以这样做:
#if __cplusplus < 201103L
    #define override
#endif

接下来,您必须确保以C++-11模式编译(在GCC中,这将是“-std=c ++ 11”)。通常最好有一个“config.h”头文件,然后在所有地方都包含它以处理这种情况。通过一些精心制作的宏,您可以确保您的代码也可以与旧编译器一起构建。除非您绝对依赖于无法#if掉的特定功能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接