我正在编写一个单元测试,每当用户按下“1”键时,都需要调用“setMaterial”函数(见下文):
auto buttonPress = [this] {
for (int i = 0; i <= mMaterials.size(); i++)
{
mAcoustics->setMaterial(mMaterials[i]);
}
};
InputManager::bindKeyFunction(0x31 /* '1' key */, buttonPress, ETriggerEvent::OnRelease);
“mMaterials”是保存我所有 Material 的
std::vector
。现在这就是我想要得到的结果:
用户按下“1”:
mAcoustics->setMaterial(mMaterials[1]);
用户再次按下“1”:
mAcoustics->setMaterial(mMaterials[2]);
当到达 vector 的最后一个元素时,它应循环回到第一个元素,然后重新开始。
什么是做到这一点的好方法?
最佳答案
将当前 Material 的索引保留为函数范围之外的变量,或将其作为参数传递给函数。
auto currentIndex = 0;
auto buttonPress = [this, ¤tIndex] {
if (currentIndex == mMaterials.size())
currentIndex = 0;
mAcoustics->setMaterial(mMaterials[currentIndex]);
currentIndex++;
};
InputManager::bindKeyFunction(0x31 /* '1' key */, buttonPress, ETriggerEvent::OnRelease);
关于c++ - C++在回调中遍历 vector ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50430947/