Visual Studio的“格式文档”无法识别Q_FOREACH宏

时间:2017-05-16 12:43:55

标签: visual-studio qt visual-studio-2017 code-formatting

我注意到Qt的Q_FOREACH宏与Visual Studio的某些功能不兼容:

  1. IntelliSense将其检测为函数声明:每个Q_FOREACH在类查看器中显示为函数/方法。幸运的是this answer解决了这个问题。

  2. 代码格式也会将其检测为函数声明(编辑>高级>格式文档)。例如,对于我当前的格式样式:

    void foo() {
    Q_FOREACH (auto action, actions){ (action);
    }
    for (int i = 0; i < 10; ++i) { (i);
    }
    }
    

    格式为

    void foo()
    {
      Q_FOREACH(auto action, actions)
      {
        (action);
      }
      for (int i = 0; i < 10; ++i) {
        (i);
      }
    }
    

    而不是

    void foo()
    {
      Q_FOREACH (auto action, actions) {
        (action);
      }
      for (int i = 0; i < 10; ++i) {
        (i);
      }
    }
    
  3. 有什么办法可以解决吗?用于解决与IntelliSense相关的第一个问题的 cpp.hint 提示已经应用,并且对格式没有帮助。

    PS:我正在使用Visual Studio Professional 2017并使用2017年的Visual Studio Add-in 2.1.1(测试版10.03.2017,从https://download.qt.io/development_releases/vsaddin/下载)。

    更新为了提供一些额外的背景信息,我们刚刚开始从VS 2010迁移到VS 2017.目前我们只迁移了IDE,工具集仍然在2010年,其中自然替换,C ++ 11 range-for,不适用于该版本的C ++编译器。

    据了解,该团队的一些成员一直在使用AStyle(和its VS plugin)进行代码格式化,这可以处理这种情况(和其他与Qt相关的事情)时尚不太受欢迎。我开始研究迁移到本机代码格式化程序的可能性并找到了这个,这就是我发布这个问题的原因。

    相关问题尚未解决我的问题:

1 个答案:

答案 0 :(得分:1)

是。修复非常简单:不要使用该宏。这是不必要的。请改用range-for。你想写:

void foo()
{
  for (auto action : actions)
    action->doSomething();
}