【问题标题】:Visual Studio's 'Format document' doesn't recognize Q_FOREACH macroVisual Studio 的“格式化文档”无法识别 Q_FOREACH 宏
【发布时间】:2017-05-16 12:43:54
【问题描述】:

我注意到 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);
      }
    }
    

有什么办法可以解决吗?用于解决与 IntelliSense 相关的第一个问题的 cpp.hint 提示已应用,但对格式没有帮助。

PS:我正在使用 Visual Studio Professional 2017 并使用 Visual Studio Add-in 2.1.1 for 2017(测试版 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 相关的事情)。我开始研究迁移到本机代码格式化程序的可能性并发现了这一点,这就是我发布这个问题的原因。


没有解决我问题的相关问题:

【问题讨论】:

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


    【解决方案1】:

    是的。修复很简单:不要使用那个宏。这是不必要的。请改用 range-for。你想写:

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

    【讨论】:

    • 是的,我知道,我也想这样做,但是,对不起,我忘了提到我们刚刚从 2010 年迁移到 2017 年,目前工具集锚定在 2010 年(其中C++11 range-for 不可用)。我正在更新问题以指出这一点。无论如何感谢您的回复!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多