如何迭代地找到几个名称在C++中只有数字不同的变量?

4 c++ variables naming

我需要一个帮助我的方法,在循环中各自到达名为"comboBox1","comboBox2"等变量.我想改变代码:

//proceed comboBox1
//proceed comboBox2
//proceed comboBox3
//proceed comboBox4
//proceed comboBox5
//proceed comboBox6
Run Code Online (Sandbox Code Playgroud)

成:

for (int i = 1; i < numberOfBoxes; i++) {
    //proceed comboBox(i)
}
Run Code Online (Sandbox Code Playgroud)

我试图找到像'eval'这样的东西,但谷歌没有给出任何匹配的东西.我也尝试使用运算符##预处理名称,但似乎没有办法将当前整数值放到宏中.

Eva*_*ran 15

最简单的解决方案是将它们全部放在一个数组中并使用迭代器:

// I've made up a type, but you get the idea.
std::vector<ComboBox *> combos;
combos.insert(comboBox1);
combos.insert(comboBox2);
combos.insert(comboBox3);
combos.insert(comboBox4);
combos.insert(comboBox5);
combos.insert(comboBox6);
Run Code Online (Sandbox Code Playgroud)

现在你可以迭代组合了.主要问题是c ++没有反射.因此,您无法在运行时生成字符串,并且可以像其他语言一样获取对象或函数的地址.

编辑:我刚看到你正在使用Qt.在这种情况下,您应该使用:

QList<T> qFindChildren ( const QObject * obj, const QString & name );
Run Code Online (Sandbox Code Playgroud)

要么

QList<T> qFindChildren ( const QObject * obj, const QRegExp & regExp);
Run Code Online (Sandbox Code Playgroud)

这使您可以根据运行时生成的名称获取列表.例如:

QList<QComboBox *> combos = qFindChildren(ui, QRegExp("combo[0-9]+"));
Run Code Online (Sandbox Code Playgroud)

然后你就可以迭代了!