Qt foreach带有多个参数的模板

dom*_*nik 5 c++ qt

我遇到了一个qt foreach和一个带有多个模板参数的模板的问题.

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

我收到这个错误:

error: use of undeclared identifier 'Q_FOREACH'
Run Code Online (Sandbox Code Playgroud)

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

Bar*_*nau 10

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

foreach(auto node, nodes) { ... }
Run Code Online (Sandbox Code Playgroud)

甚至

for(auto node: nodes) { ... }
Run Code Online (Sandbox Code Playgroud)

否则,您可以强制预处理器忽略模板中的逗号,如下所示:

#define COMMA ,
foreach(const Node<T COMMA U>& node, nodes) { ... }
Run Code Online (Sandbox Code Playgroud)

或者你可以使用typedef

typedef Node<T, U> NodeTU;
foreach(const NodeTU& node, nodes) { ... }
Run Code Online (Sandbox Code Playgroud)