我注意到Qt的Q_FOREACH
宏与Visual Studio的某些功能不兼容:
IntelliSense将其检测为函数声明:每个Q_FOREACH
在类查看器中显示为函数/方法。幸运的是this answer解决了这个问题。
代码格式也会将其检测为函数声明(编辑>高级>格式文档)。例如,对于我当前的格式样式:
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并使用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相关的事情)时尚不太受欢迎。我开始研究迁移到本机代码格式化程序的可能性并找到了这个,这就是我发布这个问题的原因。
相关问题尚未解决我的问题:
答案 0 :(得分:1)
是。修复非常简单:不要使用该宏。这是不必要的。请改用range-for。你想写:
void foo()
{
for (auto action : actions)
action->doSomething();
}