【问题标题】:Qt foreach with templates with multiple parameters带有多个参数的模板的 Qt foreach
【发布时间】:2013-01-08 13:57:12
【问题描述】:

我遇到了 qt foreach 和具有多个模板参数的模板的问题。

QVector<Node<T, U> > nodes;
...
[append some data]
...
foreach(const Node<T, U>& node, nodes) {
  ...
}

我收到此错误:

error: use of undeclared identifier 'Q_FOREACH'

我猜这是由于模板中的,,因为Qt 宏在另一个模板声明中没有检测到它。如何在不使用普通 for 循环或 C++11 的情况下解决此问题?

【问题讨论】:

  • Node&lt;T,U&gt;一个qt容器类吗?
  • @Zaiborg 是的。我编辑了问题。
  • 你试过 typedef 吗?
  • 在使用QVector&lt;QMap&lt;int,int&gt;&gt; 时遇到类似问题尝试Node&lt;T,U&gt; node; foreach( node, nodes ) {...}

标签: c++ qt


【解决方案1】:

如果你的编译器支持 C++11,你可以使用

foreach(auto node, nodes) { ... }

甚至

for(auto node: nodes) { ... }

否则,您可以像这样强制预处理器忽略模板中的逗号:

#define COMMA ,
foreach(const Node<T COMMA U>& node, nodes) { ... }

或者你可以使用 typedef

typedef Node<T, U> NodeTU;
foreach(const NodeTU& node, nodes) { ... }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-08
    • 2016-04-16
    • 1970-01-01
    • 2018-06-30
    • 1970-01-01
    • 2011-08-25
    • 1970-01-01
    相关资源
    最近更新 更多