我正在编写一个单元测试,每当用户按下“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, &currentIndex] {
    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/

10-10 16:17